4

我正在尝试检测用于安装 x86 msi 或 x64 msi 文件的正确 cpu 架构。

如果我是对的,对于 msi,我需要 os cpu 架构

我不完全确定我的方式是否正确,因为我无法测试它。你怎么看?

private static string GetOSArchitecture()
    {
        string arch = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
        string archWOW = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432");
        if(archWOW != null && archWOW != "" && archWOW.Contains("64"))
            return "x64";
        if(arch.Contains("86"))
            return "x86";
        if (arch.Contains("64"))
            return "x64";
        return "";
    }
4

3 回答 3

3

您可以 P/Invoke 到GetNativeSystemInfo,这将提供操作系统的 CPU 体系结构,即使在 64 位操作系统上的 32 位进程中也是如此。

于 2010-01-07T01:13:30.520 回答
0

正确的方法是调用IsWow64Process。不过,此 API“需要 Windows XP SP2、Windows Vista、Windows Server 2003 SP1 或 Windows Server 2008”。这种方法甚至更容易。

于 2010-01-07T00:49:41.977 回答
0

很简单,尝试执行一个 64 位应用程序。如果它失败了,你就在 32 位平台上。

编辑添加,根据您要执行的操作,如果您确保您的 msi 运行程序应用程序是 32 位应用程序,则使用 Stuart 的方法。

于 2010-01-07T00:56:44.457 回答