powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ТОЧНОЕ определение версии OS
11 сообщений из 11, страница 1 из 1
ТОЧНОЕ определение версии OS
    #38842811
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно код ниже.
Правильно определять Win8.1 6.3 я его научил:
В app.manifest раскомментировать:
Код: xml
1.
2.
      <!-- Если приложение предназначено для работы с Windows 8.1, раскомментируйте следующий узел supportedOS-->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>



Мне не хватает следующего:
1) VER_NT_WORKSTATION (не сервер /сервер)
2) GetSystemMetrics(SM_SERVERR2)
Данный флаг указывает на R2 для Windows Server 2003

>.Net справится? Или опять "не покрывает"?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
  Public Function GetWinVersionExtended() As String
    'то же что и GetWinVersion, но с учетом built
    'пишется в форме: Windows XP 5.1 built 2600 (Service Pack 3)
    GetWinVersionExtended = ""
    If Environment.OSVersion.Platform = PlatformID.Win32NT Then
      Select Case Environment.OSVersion.Version.Major
        Case 5
          Select Case Environment.OSVersion.Version.Minor
            Case 1
              GetWinVersionExtended = "Windows XP"
            Case 2
              'If GetSystemMetrics(SM_SERVERR2) <> 0 Then
              '  GetWinVersionExtended = "Windows Server 2003 R2"
              'Else
              '  GetWinVersionExtended = "Windows Server 2003"
              'End If
              GetWinVersionExtended = "Windows Server 2003"
            Case Else
          End Select
        Case 6
          Select Case Environment.OSVersion.Version.Minor
            Case 0
              'GetWinVersionExtended = _
              '  IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2008", "Windows Vista")
              GetWinVersionExtended = "Windows Vista"
            Case 1
              'GetWinVersionExtended = _
              ' IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2008 R2", "Windows 7")
              GetWinVersionExtended = "Windows 7"
            Case 2
              'GetWinVersionExtended = _
              ' IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012", "Windows 8")
              GetWinVersionExtended = "Windows 8"
            Case 3 'манифест!!!
              'GetWinVersionExtended = _
              ' IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
              GetWinVersionExtended = "Windows 8.1"
            Case Else
              'условно - для будущих версий Windows
              'GetWinVersionExtended = _
              ' IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
              GetWinVersionExtended = "Windows 8.1"
          End Select
        Case Else
          If Environment.OSVersion.Version.Major >= 6 Then
            'условно - для будущих версий Windows
            'GetWinVersionExtended = _
            ' IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
            GetWinVersionExtended = "Windows 8.1"
          Else
            GetWinVersionExtended = "Windows" ' для старых версий без уточнения
          End If
      End Select
    End If

    'dwMajorVersion.dwMinorVersion
    GetWinVersionExtended = Trim(GetWinVersionExtended & " " & _
     Environment.OSVersion.Version.Major.ToString & "." & Environment.OSVersion.Version.Minor.ToString)
    'The build number of the operating system.
    GetWinVersionExtended = Trim(GetWinVersionExtended & " build " & Environment.OSVersion.Version.Build.ToString)
    'Service Pack
    Dim str_ServicePack As String = Environment.OSVersion.ServicePack
    GetWinVersionExtended = _
     Trim(GetWinVersionExtended & IIf(str_ServicePack <> "", " (" & str_ServicePack & ")", ""))
  End Function



Оригинальный код (API, VB6):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Public Function GetWinVersionExtended() As String
  'то же что и GetWinVersion, но с учетом built
  'пишется в форме: Windows XP 5.1 built 2600 (Service Pack 3)
  Dim osv As OSVERSIONINFOEX
  osv.dwOSVersionInfoSize = Len(osv)
  If GetVersionEx(osv) = 1 Then
    If osv.dwPlatformId = VER_PLATFORM_WIN32_NT Then
      Select Case osv.dwMajorVersion
        Case 5:
          Select Case osv.dwMinorVersion
            Case 1:
              GetWinVersionExtended = "Windows XP"
            Case 2:
              If GetSystemMetrics(SM_SERVERR2) <> 0 Then
                GetWinVersionExtended = "Windows Server 2003 R2"
              Else
                GetWinVersionExtended = "Windows Server 2003"
              End If
            Case Else
          End Select
        Case 6:
          Select Case osv.dwMinorVersion
            Case 0:
              GetWinVersionExtended = _
               IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2008", "Windows Vista")
            Case 1:
              GetWinVersionExtended = _
               IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2008 R2", "Windows 7")
            Case 2:
              GetWinVersionExtended = _
               IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012", "Windows 8")
            Case 3: 'манифест!!!
              GetWinVersionExtended = _
               IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
            Case Else
          End Select
        Case Else
          If osv.dwMajorVersion >= 6 Then
            'условно - для будущих версий Windows
            GetWinVersionExtended = _
             IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
          Else
             GetWinVersionExtended = "Windows" ' для старых версий без уточнения
          End If
      End Select
      
      'dwMajorVersion.dwMinorVersion
      GetWinVersionExtended = _
       Trim(GetWinVersionExtended & " " & CStr(osv.dwMajorVersion) & "." & CStr(osv.dwMinorVersion))
      'The build number of the operating system.
      GetWinVersionExtended = Trim(GetWinVersionExtended & " build " & CStr(osv.dwBuildNumber And &HFFFF&))
      'Service Pack
      Dim pos As Long
      Dim str_ServicePack As String
      pos = InStr(osv.szCSDVersion, Chr$(0))
      If pos Then
         str_ServicePack = Left$(osv.szCSDVersion, pos - 1)
        GetWinVersionExtended = _
         Trim(GetWinVersionExtended & IIf(str_ServicePack <> "", " (" & str_ServicePack & ")", ""))
      End If
    End If
  End If
End Function

...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38842951
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну понятно. Как всегда не покрывает.


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
  Public Const SM_SERVERR2 = 89

  Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Integer) As Integer

  'System Information Structures

  Public Const VER_PLATFORM_WIN32_NT = 2

  'os product type values
  Public Const VER_NT_WORKSTATION As Integer = &H1 '!!! НЕ СЕРВЕР
 
  <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
  Public Structure OSVERSIONINFOEX
    Dim dwOSVersionInfoSize As Integer
    Dim dwMajorVersion As Integer
    Dim dwMinorVersion As Integer
    Dim dwBuildNumber As Integer
    Dim dwPlatformId As Integer
    <MarshalAs(UnmanagedType.ByValTStr, Sizeconst:=128)> Dim szCSDVersion As String
    Dim wServicePackMajor As Short
    Dim wServicePackMinor As Short
    Dim wSuiteMask As Short
    Dim wProductType As Byte
    Dim wReserved As Byte
  End Structure

  'System Information Functions
  'defined As Any to support either the
  'OSVERSIONINFO or OSVERSIONINFOEX structure
  Public Declare Unicode Function GetVersionEx Lib "kernel32" Alias "GetVersionExW" _
   (ByRef lpVersionInformation As OSVERSIONINFOEX) As Boolean

  Public Function GetWinVersionExtended() As String
    'то же что и GetWinVersion, но с учетом built
    'пишется в форме: Windows XP 5.1 built 2600 (Service Pack 3)
    GetWinVersionExtended = ""

    Dim osv As New OSVERSIONINFOEX
    osv.dwOSVersionInfoSize = Marshal.SizeOf(osv)
    If GetVersionEx(osv) Then
      If osv.dwPlatformId = VER_PLATFORM_WIN32_NT Then
        Select Case osv.dwMajorVersion
          Case 5
            Select Case osv.dwMinorVersion
              Case 1
                GetWinVersionExtended = "Windows XP"
              Case 2
                If GetSystemMetrics(SM_SERVERR2) <> 0 Then
                  GetWinVersionExtended = "Windows Server 2003 R2"
                Else
                  GetWinVersionExtended = "Windows Server 2003"
                End If
              Case Else
            End Select
          Case 6
            Select Case osv.dwMinorVersion
              Case 0
                GetWinVersionExtended = _
                 IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2008", "Windows Vista")
              Case 1
                GetWinVersionExtended = _
                 IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2008 R2", "Windows 7")
              Case 2
                GetWinVersionExtended = _
                 IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012", "Windows 8")
              Case 3 'манифест!!!
                GetWinVersionExtended = _
                 IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
              Case Else
                'условно - для будущих версий Windows
                GetWinVersionExtended = _
                 IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
            End Select
          Case Else
            If osv.dwMajorVersion >= 6 Then
              'условно - для будущих версий Windows
              GetWinVersionExtended = _
               IIf(osv.wProductType <> VER_NT_WORKSTATION, "Windows Server 2012 R2", "Windows 8.1")
            Else
              GetWinVersionExtended = "Windows" ' для старых версий без уточнения
            End If
        End Select

        'dwMajorVersion.dwMinorVersion
        GetWinVersionExtended = _
         Trim(GetWinVersionExtended & " " & osv.dwMajorVersion.ToString & "." & osv.dwMinorVersion.ToString)
        'The build number of the operating system.
        GetWinVersionExtended = Trim(GetWinVersionExtended & " build " & osv.dwBuildNumber.ToString)
        'Service Pack
        If Strings.Len(osv.szCSDVersion) > 0 Then GetWinVersionExtended = _
           Trim(GetWinVersionExtended & IIf(osv.szCSDVersion <> "", " (" & osv.szCSDVersion & ")", ""))
      End If
    End If
  End Function
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38842958
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
попадался такой тип
стар, и надо проверять.
Зачем Вам все это, как вы тут оказались?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
public static class OsParser
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct OSVERSIONINFOEX
        {
            public Int32 dwOSVersionInfoSize;
            public Int32 dwMajorVersion;
            public Int32 dwMinorVersion;
            public Int32 dwBuildNumber;
            public Int32 dwPlatformID;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string szCSDVersion;
            public short wServicePackMajor;
            public short wServicePackMinor;
            public short wSuiteMask;
            public byte wProductType;
            public byte wReserved;
        }

        public enum WinSuiteMask
        {
            VER_SUITE_SMALLBUSINESS = 1,
            VER_SUITE_ENTERPRISE = 2,
            VER_SUITE_BACKOFFICE = 4,
            VER_SUITE_COMMUNICATIONS = 8,
            VER_SUITE_TERMINAL = 16,
            VER_SUITE_SMALLBUSINESS_RESTRICTED = 32,
            VER_SUITE_EMBEDDEDNT = 64,
            VER_SUITE_DATACENTER = 128,
            VER_SUITE_SINGLEUSERTS = 256,
            VER_SUITE_PERSONAL = 512,
            VER_SUITE_BLADE = 1024,
            VER_SUITE_STORAGE_SERVER = 8192,
            VER_SUITE_COMPUTE_SERVER = 16384
        }

        public enum WinPlatform : byte
        {
            VER_NT_WORKSTATION = 1,
            VER_NT_DOMAIN_CONTROLLER = 2,
            VER_NT_SERVER = 3
        }

        public enum OSMajorVersion : byte
        {
            VER_OS_NT4 = 4,
            VER_OS_2K_XP_2K3 = 5,
            VER_OS_VISTA_LONGHORN = 6
        }

        private const Int32 SM_SERVERR2 = 89;

        [DllImport("user32")]
        private static extern int GetSystemMetrics(int nIndex);

        [DllImport("kernel32")]
        private static extern int GetVersionEx(ref OSVERSIONINFOEX lpVersionInformation);

        public static string GetVersionEx()
        {
            var xosvi = new OSVERSIONINFOEX {dwOSVersionInfoSize = Marshal.SizeOf(typeof (OSVERSIONINFOEX))};

            try
            {
                var iRet = (int) Environment.OSVersion.Platform;
                if (iRet == 1)
                {
                    return "У.г.";
                }
                GetVersionEx(ref xosvi);
                var strDetails = Environment.NewLine + "Version: " + xosvi.dwMajorVersion + "." +
                                 xosvi.dwMinorVersion + "." +
                                 xosvi.dwBuildNumber + Environment.NewLine + xosvi.szCSDVersion + " (" +
                                 xosvi.wServicePackMajor + "." + xosvi.wServicePackMinor + ")";
                if (xosvi.dwMajorVersion == (byte) OSMajorVersion.VER_OS_NT4)
                {
                    return "Windows NT 4" + strDetails;
                }
                if (xosvi.dwMajorVersion == (decimal) OSMajorVersion.VER_OS_2K_XP_2K3)
                {
                    if (xosvi.dwMinorVersion == 0)
                    {
                        if (xosvi.wProductType == (decimal) WinPlatform.VER_NT_WORKSTATION)
                        {
                            return "Windows 2000 Pro" + strDetails;
                        }
                        if (xosvi.wProductType == (decimal) WinPlatform.VER_NT_SERVER)
                        {
                            if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_DATACENTER) ==
                                (decimal) WinSuiteMask.VER_SUITE_DATACENTER)
                            {
                                return "Windows 2000 Datacenter Server" + strDetails;
                            }
                            if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_ENTERPRISE) ==
                                (decimal) WinSuiteMask.VER_SUITE_ENTERPRISE)
                            {
                                return "Windows 2000 Advanced Server" + strDetails;
                            }
                            if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_SMALLBUSINESS) ==
                                (decimal) WinSuiteMask.VER_SUITE_SMALLBUSINESS)
                            {
                                return "Windows 2000 Small Business Server" + strDetails;
                            }
                            return "Windows 2000 Server" + strDetails;
                        }
                        if (xosvi.wProductType == (decimal) WinPlatform.VER_NT_DOMAIN_CONTROLLER)
                        {
                            if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_DATACENTER) ==
                                (decimal) WinSuiteMask.VER_SUITE_DATACENTER)
                            {
                                return "Windows 2000 Datacenter Server Domain Controller" + strDetails;
                            }
                            if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_ENTERPRISE) ==
                                (decimal) WinSuiteMask.VER_SUITE_ENTERPRISE)
                            {
                                return "Windows 2000 Advanced Server Domain Controller" + strDetails;
                            }
                            if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_SMALLBUSINESS) ==
                                (decimal) WinSuiteMask.VER_SUITE_SMALLBUSINESS)
                            {
                                return "Windows 2000 Small Business Server Domain Controller" + strDetails;
                            }
                            return "Windows 2000 Server Domain Controller" + strDetails;
                        }
                    }
                    else if (xosvi.dwMinorVersion == 1)
                    {
                        if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_PERSONAL) ==
                            (decimal) WinSuiteMask.VER_SUITE_PERSONAL)
                        {
                            return "Windows XP Home Edition" + strDetails;
                        }
                        return "Windows XP Professional Edition" + strDetails;
                    }
                    else if (xosvi.dwMinorVersion == 2)
                    {
                        if (xosvi.wProductType == (decimal) WinPlatform.VER_NT_WORKSTATION)
                        {
                            return "Windows XP Professional x64 Edition" + strDetails;
                        }
                        if (xosvi.wProductType == (decimal) WinPlatform.VER_NT_SERVER)
                        {
                            if (GetSystemMetrics(SM_SERVERR2) == 1)
                            {
                                return "Windows Server 2003 R2" + strDetails;
                            }
                            return "Windows Server 2003" + strDetails;
                        }
                        if (xosvi.wProductType == (decimal) WinPlatform.VER_NT_DOMAIN_CONTROLLER)
                        {
                            if (GetSystemMetrics(SM_SERVERR2) == 1)
                            {
                                return "Windows Server 2003 R2 Domain Controller" + strDetails;
                            }
                            return "Windows Server 2003 Domain Controller" + strDetails;
                        }
                    }
                }
                else if (xosvi.dwMajorVersion == (decimal) OSMajorVersion.VER_OS_VISTA_LONGHORN)
                {
                    if (xosvi.wProductType != (decimal) WinPlatform.VER_NT_WORKSTATION)
                        return "Windows Server (Longhorn)" + strDetails;
                    if ((xosvi.wSuiteMask & (long) WinSuiteMask.VER_SUITE_PERSONAL) ==
                        (decimal) WinSuiteMask.VER_SUITE_PERSONAL)
                    {
                        return "Windows Vista (Home Premium, Home Basic, or Home Ultimate) Edition";
                    }
                    return "Windows Vista (Enterprize or Business)" + strDetails;
                }
            }
            catch (Exception ex)
            {
                //так то нужно getLastError
                return "((";
            }
            return string.Empty;
        }

        public enum WindowsVersion
        {
            Unknown = 0,
            Windows95,
            Windows98,
            WindowsMe,
            WindowsNt351,
            WindowsNt4,
            Windows2000,
            WindowsXp,
            WindowsServer2003,
            Vista,
            WindowsServer2008
        }


        public static WindowsVersion GetVersion()
        {
            var ret = WindowsVersion.Unknown;

            var info = new OSVERSIONINFOEX {dwOSVersionInfoSize = Marshal.SizeOf(typeof (OSVERSIONINFOEX))};
            GetVersionEx(ref info);

            var osInfo = Environment.OSVersion;

            switch (osInfo.Platform)
            {
                case PlatformID.Win32Windows:
                    switch (osInfo.Version.Minor)
                    {
                        case 0:
                            ret = WindowsVersion.Windows95;
                            break;
                        case 10:
                            ret = WindowsVersion.Windows98;
                            break;
                        case 90:
                            ret = WindowsVersion.WindowsMe;
                            break;
                    }
                    break;

                case PlatformID.Win32NT:
                    switch (osInfo.Version.Major)
                    {
                        case 3:
                            ret = WindowsVersion.WindowsNt351;
                            break;
                        case 4:
                            ret = WindowsVersion.WindowsNt4;
                            break;
                        case 5:
                            switch (osInfo.Version.Minor)
                            {
                                case 0:
                                    ret = WindowsVersion.Windows2000;
                                    break;
                                case 1:
                                    ret = WindowsVersion.WindowsXp;
                                    break;
                                case 2:
                                    var i = GetSystemMetrics(SM_SERVERR2);
                                    if (i != 0)
                                    {
                                        ret = WindowsVersion.WindowsServer2003;
                                    }
                                    else
                                    {
                                        ret = info.wProductType == (byte) WinPlatform.VER_NT_WORKSTATION
                                            ? WindowsVersion.WindowsXp
                                            : WindowsVersion.WindowsServer2003;
                                    }
                                    break;
                            }
                            break;
                        case 6:
                            ret = info.wProductType == (byte) WinPlatform.VER_NT_WORKSTATION
                                ? WindowsVersion.Vista
                                : WindowsVersion.WindowsServer2008;
                            break;
                    }
                    break;
            }
            return ret;
        }

        public static string GetWindowsDirectory()
        {
            return Environment.GetEnvironmentVariable("windir");
        }
    }


...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843098
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

Но ваш код от моего API-кода ничем не отличается. Мой только знает про OS вплоть до Win 8.1 и не учитывает все что до XP.

Я спрашивал про Environment.OSVersion и им подобные .Net решения.

>Зачем Вам
Зачем различать Win7 от Win 2008 R2? Разница между сервером и пользовательской OS как бы есть и поведение программы может отличаться.
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843128
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
гы вы уж определитесь
или
авторМне не хватает следующего:
1) VER_NT_WORKSTATION (не сервер /сервер)
2) GetSystemMetrics(SM_SERVERR2)
Данный флаг указывает на R2 для Windows Server 2003

или

авторЯ спрашивал про Environment.OSVersion и им подобные .Net решения.


я вам что, на Php написал что ли?
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843209
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи я вам что, на Php написал что ли?
Нет, не на php.
Вы написали на Win32 API
OSVERSIONINFOEX + GetVersionEx
И если вы внимательно посмотрите на код в моем первом посте (под спойлером) и на код в моем втором посте, вы поймете что это тоже самое (ну м.б. у вас более подробно расписаны VER_SUITE_DATACENTER,VER_NT_DOMAIN_CONTROLLER и т.п. но они меня как раз мало интересуют).

В моем первом посте приведен также код на базе .Net класса Environment.OSVersion
Который API не использует.
Но он не позволяет узнать VER_NT_WORKSTATION и SM_SERVERR2.
И вопрос был как это получить через .Net -классы.

Где-то в степигы вы уж определитесь
я определился - в пользу Win32 API.
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843246
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
я вообще не могу вас понять, если вы в контексте api?
эти вопросы вообще не уместны ибо VER_NT_WORKSTATION это значение енума,
а SM_SERVERR2 всегда равно 89 ( читайте спецификацию) если вы хотите узнать принадлежность к 2003 му.
если в конексте еnvironment.osversion, то гуглится на раз

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
  public enum WinPlatform : byte
        {
            NotDetermine = 0,
            VER_NT_WORKSTATION = 1,
            VER_NT_DOMAIN_CONTROLLER = 2,
            VER_NT_SERVER = 3
        }

        private static WinPlatform GetProductType()
        {
            using (var regKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\ProductOptions"))
            {
                if (regKey == null) throw new Exception("не удалось найти указанный ключ");
                WinPlatform value;
                switch (regKey.GetValue("ProductType").ToString())
                {
                    case "WinNT":
                        value = WinPlatform.VER_NT_WORKSTATION;
                        break;
                    case "LanmanNT":
                        value = WinPlatform.VER_NT_DOMAIN_CONTROLLER;
                        break;
                    case "ServerNT":
                        value = WinPlatform.VER_NT_SERVER;
                        break;
                    default:
                        value = WinPlatform.NotDetermine;
                        break;
                }

                return value;
            }
        }



SM_SERVERR2 =89 там и там..
и тонны айпи кода можно не постить..
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843255
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

Я не сторонник копания в реестре, если можно сделать через API.
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843259
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
ну а зачем тогда сюда посите такие риторические вопросы и портянки кода?
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843290
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

В надежде получить ответ с использованием .Net -классов ( при наличии такого ответа).
Или уверенный ответ об отсутствии в .Net наличия такового.

Ну а в API я ориентируюсь не хуже вашего как наверно поняли.
Просто второй раз уже вы приводите мне код на API при том что я этот же код привел постом выше.
Вы хоть просматривайте мои "портянки кода" перед тем как приводить свои.

А привожу для того чтоб было понятней чего именно я хочу.
...
Рейтинг: 0 / 0
ТОЧНОЕ определение версии OS
    #38843297
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
я сюда ворвался с плюсов в седьмом году, такой весь: да чо тут у вас все так запущено, айпи рулит - ладно Нахлобуч попался
технично остановил, айпи последний довод королей, если программа состоит из одних айпи - не верно выбран язык и предмет
разработки, у net другие задачи и другой драйв исполнения, если не получается без них, возвращайтесь откуда пришли и не мучайте себя
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ТОЧНОЕ определение версии OS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]