Como posso detectar as versões do sistema operacional Windows no .net?
Qual código posso usar?
fonte
Como posso detectar as versões do sistema operacional Windows no .net?
Qual código posso usar?
System.Environment.OSVersion
possui as informações necessárias para distinguir a maioria das principais versões do sistema operacional Windows, mas não todas. Consiste em três componentes que são mapeados para as seguintes versões do 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 |
+------------------------------------------------------------------------------+
Para uma biblioteca que permita obter uma visão mais completa da versão exata do Windows em que o ambiente de execução atual está sendo executado, consulte esta biblioteca .
Nota importante : se o manifesto do assembly executável não declarar explicitamente que o assembly exe é compatível com o Windows 8.1 e o Windows 10.0, System.Environment.OSVersion
retornará a versão do Windows 8, que é 6.2, em vez de 6.3 e 10.0! Fonte: aqui .
Eu usei isso quando tive que determinar várias versões do sistema operacional Microsoft:
Fonte: aqui
fonte
vs.Minor != 0
não precisa necessariamente serXP
ou7
. Poderia ser qualquer uma dessas edições do servidor que terá as mesmas versões menores .. Veja aqui msdn.microsoft.com/en-us/library/windows/desktop/...Eu uso o
ManagementObjectSearcher
espaço para nomeSystem.Management
Exemplo:
Resultado:
Documentação
fonte
Como R. Bemrose sugeriu, se você estiver executando recursos específicos do Windows 7, consulte o Windows® API Code Pack para Microsoft® .NET Framework .
Ele contém uma
CoreHelpers
classe que permite determinar o sistema operacional em que você está atualmente (apenas XP e superior, é um requisito para o .NET atualmente)Ele também fornece vários métodos auxiliares. Por exemplo, suponha que você queira usar a lista de atalhos do Windows 7, existe uma classe
TaskbarManager
que fornece uma propriedade chamadaIsPlatformSupported
e ela retornará true se você estiver no Windows 7 e acima.fonte
Você pode usar esta classe auxiliar;
O código de amostra está aqui:
Fui encontrado neste endereço: http://www.csharp411.com/wp-content/uploads/2009/01/OSInfo.cs
fonte
Via
Environment.OSVersion
qual "Obtém um objeto System.OperatingSystem que contém o identificador da plataforma atual e o número da versão".fonte
Todas parecem respostas muito complicadas para uma função muito simples:
fonte
Detectar a versão do SO:
fonte
Essa é uma pergunta relativamente antiga, mas recentemente tive que resolver esse problema e não vi minha solução publicada em nenhum lugar.
A maneira mais fácil (e mais simples, na minha opinião) é usar apenas uma chamada pinvoke para RtlGetVersion
Onde os números de versão Maior e Menor nesta estrutura correspondem aos valores na tabela da resposta aceita.
Isso retorna o número de versão correto do Windows, diferente das funções obsoletas GetVersion & GetVersionEx do kernel32
fonte
Microsoft.VisualBasic
.using Microsoft.VisualBasic.Devices
;new ComputerInfo().OSFullName
O valor de retorno é "Microsoft Windows 10 Enterprise"
fonte
Mão única:
Em seguida, basta envolver um caso de seleção em torno da função.
fonte
Que tal usar um registro para obter o nome.
"HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion" tem um valor ProductName desde o Windows XP.
Se você estiver usando o .NET Framework 4.0 ou superior. Você pode remover o método Is64BitOperatingSystem () e usar Environment.Is64BitOperatingSystem .
fonte
Primeira solução
Para garantir que você obtenha a versão correta
Environment.OSVersion
, adicione umapp.manifest
usando o Visual Studio e remova o comentário das seguintessupportedOS
tags:Então, no seu código, você pode usar
Environment.OSVersion
assim:Exemplo
Por exemplo, em meu
Windows 10.0 Build 18362.476
resultado machine ( ) seria assim, o que está incorreto :Ao adicionar
app.manifest
e descomentar essas tags , obteremos o número da versão correta:Solução alternativa
Se você não gosta de adicionar
app.manifest
ao seu projeto, pode usar oOSDescription
que está disponível desde o .NET Framework 4.7.1 e .NET Core 1.0.Nota: Não esqueça de adicionar a seguinte declaração using no topo do seu arquivo.
Você pode ler mais sobre ele e as plataformas suportadas aqui .
fonte
As respostas acima me dariam a
Major
versão6
no Windows 10.A solução que eu encontrei para trabalhar sem adicionar bibliotecas VB extras foi a seguinte:
Eu não consideraria essa a melhor maneira de obter a versão, mas o lado positivo disso é que não há bibliotecas extras e, no meu caso, verificar se ela contém
"10"
foi boa o suficiente.fonte
Não complique demais o problema.
fonte
Major
parte da versão. Além disso, ele informa "Win7!" em um sistema operacional Windows NT / Me / 98/95. Ele também não vai lidar bem com as futuras versões dos sistemas operacionais