System.Environment.OSVersion
zawiera informacje potrzebne do odróżnienia większości głównych wersji systemu operacyjnego Windows, ale nie wszystkich. Składa się z trzech komponentów, które są mapowane na następujące wersje systemu Windows:
+------------------------------------------------------------------------------+
| | PlatformID | Major version | Minor version |
+------------------------------------------------------------------------------+
| Windows 95 | Win32Windows | 4 | 0 |
| Windows 98 | Win32Windows | 4 | 10 |
| Windows Me | Win32Windows | 4 | 90 |
| Windows NT 4.0 | Win32NT | 4 | 0 |
| Windows 2000 | Win32NT | 5 | 0 |
| Windows XP | Win32NT | 5 | 1 |
| Windows 2003 | Win32NT | 5 | 2 |
| Windows Vista | Win32NT | 6 | 0 |
| Windows 2008 | Win32NT | 6 | 0 |
| Windows 7 | Win32NT | 6 | 1 |
| Windows 2008 R2 | Win32NT | 6 | 1 |
| Windows 8 | Win32NT | 6 | 2 |
| Windows 8.1 | Win32NT | 6 | 3 |
+------------------------------------------------------------------------------+
| Windows 10 | Win32NT | 10 | 0 |
+------------------------------------------------------------------------------+
W przypadku biblioteki, która pozwala uzyskać pełniejszy widok dokładnego wydania systemu Windows, w którym działa bieżące środowisko wykonawcze, zapoznaj się z tą biblioteką .
Ważna uwaga : jeśli plik wykonywalnego manifestu zestawu nie stwierdza jawnie, że zestaw exe jest zgodny z systemem Windows 8.1 i Windows 10.0, System.Environment.OSVersion
zwróci wersję systemu Windows 8, czyli 6.2, zamiast 6.3 i 10.0! Źródło: tutaj .
Użyłem tego, gdy musiałem określić różne wersje systemu operacyjnego Microsoft:
Źródło: tutaj
źródło
vs.Minor != 0
niekoniecznie musi byćXP
lub7
. Może to być dowolna z tych wersji serwera, które będą miały te same pomniejsze wersje. Zobacz tutaj msdn.microsoft.com/en-us/library/windows/desktop/…Używam
ManagementObjectSearcher
przestrzeni nazwSystem.Management
Przykład:
Wynik:
Dokumentacja
źródło
Jak zasugerował R. Bemrose, jeśli korzystasz z funkcji specyficznych dla systemu Windows 7, powinieneś zapoznać się z pakietem Windows® API Code Pack dla Microsoft® .NET Framework .
Zawiera
CoreHelpers
klasę, która pozwala określić system operacyjny, z którego aktualnie korzystasz (tylko XP i nowszy, jest to obecnie wymagane dla platformy .NET)Zapewnia również wiele metod pomocniczych. Na przykład załóżmy, że chcesz użyć listy skoków systemu Windows 7, istnieje klasa,
TaskbarManager
która udostępnia właściwość o nazwieIsPlatformSupported
i zwróci wartość true, jeśli używasz systemu Windows 7 lub nowszego.źródło
Możesz użyć tej klasy pomocnika;
Przykładowy kod jest tutaj:
Znaleziono mnie pod tym adresem: http://www.csharp411.com/wp-content/uploads/2009/01/OSInfo.cs
źródło
Za pośrednictwem
Environment.OSVersion
którego „Pobiera obiekt System.OperatingSystem zawierający bieżący identyfikator platformy i numer wersji”.źródło
Te wszystkie wydają się bardzo skomplikowanymi odpowiedziami na bardzo prostą funkcję:
źródło
Wykryj wersję systemu operacyjnego:
źródło
To jest stosunkowo stare pytanie, ale ostatnio musiałem rozwiązać ten problem i nigdzie nie widziałem mojego rozwiązania.
Najłatwiejszym (i moim zdaniem najprostszym sposobem) jest użycie wywołania pinvoke do RtlGetVersion
Gdzie główne i drugorzędne numery wersji w tej strukturze odpowiadają wartościom w tabeli zaakceptowanej odpowiedzi.
Zwraca prawidłowy numer wersji systemu Windows, w przeciwieństwie do przestarzałych funkcji GetVersion i GetVersionEx z kernel32
źródło
Microsoft.VisualBasic
.using Microsoft.VisualBasic.Devices
;new ComputerInfo().OSFullName
Zwracana wartość to „Microsoft Windows 10 Enterprise”
źródło
Jednokierunkowa:
Następnie po prostu zawiń zaznaczoną wielkość liter wokół funkcji.
źródło
Co powiesz na użycie rejestru, aby uzyskać nazwę.
„HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion” ma wartość ProductName od wersji Windows XP.
Jeśli używasz .NET Framework 4.0 lub nowszego. Możesz usunąć metodę Is64BitOperatingSystem () i użyć Environment.Is64BitOperatingSystem .
źródło
Pierwsze rozwiązanie
Aby upewnić się, że otrzymujesz odpowiednią wersję
Environment.OSVersion
, należy dodaćapp.manifest
przy użyciu programu Visual Studio i odkomentować następującesupportedOS
tagi:Następnie w swoim kodzie możesz użyć w
Environment.OSVersion
ten sposób:Przykład
Na przykład w moim machine (
Windows 10.0 Build 18362.476
) wynik byłby taki, który jest nieprawidłowy :Dodając
app.manifest
i odkomentowując te tagi uzyskam odpowiedni numer wersji:Alternatywne rozwiązanie
Jeśli nie lubisz dodawać
app.manifest
do projektu, możesz użyć tego,OSDescription
który jest dostępny od wersji .NET Framework 4.7.1 i .NET Core 1.0.Uwaga: nie zapomnij dodać następującego wyrażenia using na początku pliku.
Możesz przeczytać więcej o tym i obsługiwanych platformach tutaj .
źródło
Powyższe odpowiedzi dałyby mi
Major
wersję6
na Windows 10.Rozwiązanie, które odkryłem, że działa bez dodawania dodatkowych bibliotek VB, było następujące:
Nie uważałbym tego za najlepszy sposób na uzyskanie wersji, ale zaletą jest to, że oneliner nie ma dodatkowych bibliotek, aw moim przypadku sprawdzenie, czy zawiera,
"10"
było wystarczająco dobre.źródło
Nie komplikuj zbytnio problemu.
źródło
Major
część wersji. Dodatkowo zgłasza „Win7!” w systemie operacyjnym Windows NT / Me / 98/95. Nie poradzi sobie również dobrze z przyszłymi wersjami systemów operacyjnych