在.NET 2.0 c#应用程序中,我使用以下代码来检测操作系统平台:
string os_platform = System.Environment.OSVersion.Platform.ToString();
返回“Win32NT”。问题是即使在Windows Vista 64位上运行,它也会返回“Win32NT”。
有没有其他方法来知道正确的平台(32位或64位)?
注意,当在Windows 64位上作为32位应用程序运行时,它也应该检测64位。
在.NET 2.0 c#应用程序中,我使用以下代码来检测操作系统平台:
string os_platform = System.Environment.OSVersion.Platform.ToString();
返回“Win32NT”。问题是即使在Windows Vista 64位上运行,它也会返回“Win32NT”。
有没有其他方法来知道正确的平台(32位或64位)?
注意,当在Windows 64位上作为32位应用程序运行时,它也应该检测64位。
当前回答
如果你使用的是。net Framework 4.0,这很简单:
Environment.Is64BitOperatingSystem
看到环境。Is64BitOperatingSystem属性。
其他回答
我需要这样做,但我也需要能够作为一个管理员远程做到这一点,无论是哪种情况下,这似乎很适合我:
public static bool is64bit(String host)
{
using (var reg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, host))
using (var key = reg.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\"))
{
return key.GetValue("ProgramFilesDir (x86)") !=null;
}
}
考虑到公认的答案非常复杂。还有更简单的方法。我的答案是亚历山德鲁库的。 考虑到64位windows在Program Files (x86)中安装32位应用程序,您可以使用环境变量检查该文件夹是否存在(以弥补不同的本地化)
如。
private bool Is64BitSystem
{
get
{
return Directory.Exists(Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES(X86)%"));
}
}
这对我来说更快更简单。鉴于我也希望访问基于OS版本的文件夹下的特定路径。
最快的方式:
if(IntPtr.Size == 8) {
// 64 bit machine
} else if(IntPtr.Size == 4) {
// 32 bit machine
}
注意:这是非常直接的,只有当程序不强制作为32位进程执行时(例如,在项目设置中通过<Prefer32Bit>true</Prefer32Bit>),才能在64位上正确工作。
我在许多操作系统上都成功地使用了这个检查:
private bool Is64BitSystem
{
get
{
return Directory.Exists(Environment.ExpandEnvironmentVariables(@"%windir%\SysWOW64"));
}
}
不管操作系统的语言是什么,这个文件夹总是命名为“SysWOW64”。这适用于。net Framework 1.1或更高版本。
如果你使用的是。net Framework 4.0,这很简单:
Environment.Is64BitOperatingSystem
看到环境。Is64BitOperatingSystem属性。