Подтвердить что ты не робот

Определение ОС с помощью Environment.OSVersion

Что лучше всего определить Microsoft OS, которая размещает ваше приложение ASP.NET, используя пространство имен System.Environment.OSVersion

Мне нужен пример для Windows XP, Windows Server 2003 и Windows Vista​​p >

Вот что я пытаюсь выполнить с помощью псевдокода

switch(/* Condition for determining OS */)
{
    case "WindowsXP":
        //Do Windows XP stuff
        break;
    case "Windows Server 2003":
        //Do Windows Server 2003 stuff
        break;
    case "Windows Vista":
        //Do Windows Vista stuff
        break;
}
4b9b3361

Ответ 1

Следующее должно работать. Но почему вас это волнует? Это только для информационных целей при регистрации или вы ищете фактические возможности, присутствующие на целевой платформе?

if (Environment.OSVersion.Version.Major == 5)
{
    if (Environment.OSVersion.Version.Minor == 1)
    {
             // XP
    }
    else if (Environment.OSVersion.Version.Minor == 2)
    {
             // Server 2003.  XP 64-bit will also fall in here.
    }
}
else if (Environment.OSVersion.Version.Major >= 6)
{
        // Vista on up
}

Ответ 2

Не полный список, но получил это от http://support.microsoft.com/kb/304283:

+--------------------------------------------------------------+
|           |Windows|Windows|Windows|Windows NT|Windows|Windows|
|           |  95   |  98   |  Me   |    4.0   | 2000  |  XP   |
+--------------------------------------------------------------+
|PlatformID | 1     | 1     | 1     | 2        | 2     | 2     |
+--------------------------------------------------------------+
|Major      |       |       |       |          |       |       |
| version   | 4     | 4     | 4     | 4        | 5     | 5     |
+--------------------------------------------------------------+
|Minor      |       |       |       |          |       |       |
| version   | 0     | 10    | 90    | 0        | 0     | 1     |
+--------------------------------------------------------------+

Изменить: обратите внимание, что информация, возвращаемая System.Environment.OSVersion, может быть ненадежной, если приложение работает в режиме совместимости.

Edit2: я бы порекомендовал вам просто сделать его настраиваемым значением в вашем приложении - таким образом ваш код не нуждается в перекомпиляции, когда выйдет новая ОС, например Windows 7.

Ответ 3

Если вам не нужно указывать на R2 серверных выпусков, более простая альтернатива:

enum OS { _2000, XP, Server2003, Vista, Server2008, _7, Server2012, _8 }

const int OS_ANYSERVER = 29;

[DllImport("shlwapi.dll", SetLastError = true, EntryPoint = "#437")]
static extern bool IsOS(int os);

static bool isWindowsServer = IsOS(OS_ANYSERVER);

public static OS GetOS()
{
    var version = Environment.OSVersion.Version;
    switch (version.Major)
    {
        case 5:
            switch (version.Minor)
            {
                case 0:
                    return OS._2000;
                case 1:
                    return OS.XP;
                case 2:
                    return isWindowsServer ? OS.Server2003 : OS.XP;
            }
            break;
        case 6:
            switch (version.Minor)
            {
                case 0:
                    return isWindowsServer ? OS.Server2008 : OS.Vista;
                case 1:
                    return isWindowsServer ? OS.Server2008 : OS._7;
                case 2:
                    return isWindowsServer ? OS.Server2012 : OS._8;
            }
            break;
    }

    throw new Exception("Strange OS");
}

Скопировано из здесь.

Чтобы быть более конкретными, ваши варианты,

  • WMI, вам придется провести ручную разборку. Не уверен, что пользовательские привилегии будут причинять вред пользователям не администраторам.

  • GetVersionEx, как описано в этом ответе.

  • Проверка ProductName на

    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
    

Ответ 4

if(Environment.OSVersion.Version.Major > 5) { /* vista and above */ }