检测cpu架构的正确方法?
我正在尝试检测用于安装 x86 msi 或 x64 msi 文件的正确 cpu 架构。
如果我是对的,对于 msi,我需要操作系统 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 "";
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以 P/Invoke 到 GetNativeSystemInfo,这将提供操作系统的 CPU 架构,即使是在 64 位操作系统上的 32 位进程中也是如此。
You could P/Invoke to GetNativeSystemInfo, which will give the CPU architecture of the OS, even from within a 32-bit process on a 64-bit OS.
正确的方法是调用 IsWow64Process。不过,此 API“需要 Windows XP SP2、Windows Vista、Windows Server 2003 SP1 或 Windows Server 2008”。 此方法更简单。
The right way is to call IsWow64Process. This API "Requires Windows XP SP2, Windows Vista, Windows Server 2003 SP1 or Windows Server 2008" though. This method is even easier.
很简单,尝试执行 64 位应用程序。如果失败,说明您使用的是 32 位平台。
编辑添加,根据您想要执行的操作,如果您确保您的 msi 运行程序应用程序是 32 位应用程序,则使用 Stuart 的方法。
Simple, try executing a 64bit application. If it fails you're on a 32bit platform.
Edited to add, based on what you're trying to do, if you make sure your msi runner application is a 32bit app then use Stuart's method.