Пример:
Name = Windows Vista
Edition = Home Premium
Service Pack = Service Pack 1
Version = 6.0.6001.65536
Bits = 64
образца Класс:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Operation System Information");
Console.WriteLine("----------------------------");
Console.WriteLine("Name = {0}", OSInfo.Name);
Console.WriteLine("Edition = {0}", OSInfo.Edition);
Console.WriteLine("Service Pack = {0}", OSInfo.ServicePack);
Console.WriteLine("Version = {0}", OSInfo.VersionString);
Console.WriteLine("Bits = {0}", OSInfo.Bits);
Console.ReadLine();
}
}
Исходный код для класса OSInfo: http://www.csharp411.com/determine-windows-version-and-edition-with-c/ Однако в коде есть ошибка, вам нужно будет заменить оператор «случай 6» (это как раз перед #endregion NAME) с этим:
case 6:
switch (minorVersion)
{
case 0:
switch (productType)
{
case 1:
name = "Windows Vista";
break;
case 3:
name = "Windows Server 2008";
break;
}
break;
case 1:
switch (productType)
{
case 1:
name = "Windows 7";
break;
case 3:
name = "Windows Server 2008 R2";
break;
}
break;
}
break;
И если вы хотите, чтобы дальше идти на шаг и посмотреть, если ваша программа работает в 64 или 32 бит :
public static class Wow
{
public static bool Is64BitProcess
{
get { return IntPtr.Size == 8; }
}
public static bool Is64BitOperatingSystem
{
get
{
// Clearly if this is a 64-bit process we must be on a 64-bit OS.
if (Is64BitProcess)
return true;
// Ok, so we are a 32-bit process, but is the OS 64-bit?
// If we are running under Wow64 than the OS is 64-bit.
bool isWow64;
return ModuleContainsFunction("kernel32.dll", "IsWow64Process") && IsWow64Process(GetCurrentProcess(), out isWow64) && isWow64;
}
}
static bool ModuleContainsFunction(string moduleName, string methodName)
{
IntPtr hModule = GetModuleHandle(moduleName);
if (hModule != IntPtr.Zero)
return GetProcAddress(hModule, methodName) != IntPtr.Zero;
return false;
}
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
extern static bool IsWow64Process(IntPtr hProcess, [MarshalAs(UnmanagedType.Bool)] out bool isWow64);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
extern static IntPtr GetCurrentProcess();
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
extern static IntPtr GetModuleHandle(string moduleName);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
extern static IntPtr GetProcAddress(IntPtr hModule, string methodName);
}
Будьте осторожны, я видел много примеров кода для этого, что ломает, когда пользователь не является администратором ... и конечно, много образцов кода, которые также работают для пользователя, не являющегося администратором. Просто будьте осторожны ^^ –