Como identificar qual versão do .Net Framework está instalada.
Introdução
Navegando pelos diversos forums técnicos, percebi que é frequente a dúvida de como determinar qual versão do .Net Framework está rodando na máquina. Na verdade, eu também já precisei desse tipo de solução J
Como determinar as diversas versões?
Versões existentes
Agora que a versão 2.0 do .Net Framework acaba se ser liberada, temos 3 diferentes versões que podem estar coexistindo lado a lado numa mesma máquina. Veja que uma determinada versão pode ter também um ou mais service packs liberados para essa versão.
A tabela abaixo mostra isso com mais detalhes as versões do .Net Framework e do Visual Studio.
|
.Net Framework product version |
Service pack level |
Version |
|
.Net Framework 1.0 |
Original release |
1.0.3705.0 and 7.0.9466.0 |
|
.Net Framework 1.0 |
Service Pack 1 |
1.0.3705.209 |
|
.Net Framework 1.0 |
Service Pack 2 |
1.0.3705.288 and 7.0.9502.0 |
|
.Net Framework 1.0 |
Service Pack 3 |
1.0.3705.6018 and 7.0.9951.0 |
|
.NET Framework 1.1 |
Original release |
1.1.4322.573 and 7.10.3052.4 |
|
.NET Framework 1.1 |
Service pack 1 |
1.1.4322.2032 and 7.10.6001.4 |
|
.NET Framework 2.0 |
Beta 1 |
2.0.40607.16 and 8.0.40607.16 |
|
.NET Framework 2.0 |
Beta 2 |
2.0.50215.44 and 8.0.50215.44 |
|
.NET Framework 2.0 |
Original release |
2.0.50727.42 |
A maneira mais simples de determinar a versão instalada no computador é localizar o diretório %systemroot%\Microsoft.Net\Framework. Você pode colar o nome do caminho do diretório na barra de endereços do Windows Explorer para localizar o diretório do framework. Você então de verá encontrar os seguintes releases:
- V1.0.3705
- V1.1.4322
- V2.0.50727
Caso você encontre outros diretórios que tenham o formato vN.N.NXXXX que não estejam nessa lista acima, podem ser versões beta ou pré-releases do .Net Framework. Uma vez encontrado o diretório, siga as seguintes etapas:
- Abra qualquer um dos diretórios da lista acima e localize o arquivo mscorlib.dll.
- Clique com o mouse direito sobre o arquivo e então clique em Propriedades.
- Clique na orelha Versões e veja a versão do arquivo.
- Compare com a lista para ver qual versão esta instalada no computador. Clique em OK.
Note que não é aconselhável a versão do arquivo na tabela acima para determinar o nível do service pack instalado. Se você estiver interessado em uma solução mais precisa sobre qual versão do .Net Framework está instalada e os correspondentes service packs, de uma olhada nas sugestões a seguir.
Determinando a versão via código
Para aqueles que precisam fazer essa verificação numa aplicação, via código, seguem a seguir algumas dicas e trechos de código de como proceder.
Se você deseja utilizar essa verificação em código não gerenciado, uma boa dica é o código postado no blog de Aaron Stebner.
Para aqueles que quiserem utilizar código gerenciado, seguem os comentários sobre um componente CheckVersion que implementei em C# e que utilizo em alguns projetos. As mais recentes atualizações foram para compatibilizá-lo com a versão 2.0 do Framework. O código pode ser facilmente convertido para VB.Net para aqueles que estiverem interessados.
Como o projeto foi criado usando o VS.Net 2005, para rodar você pode usar o Visual C# Express ou adicionar a classe a um projeto do VS 2003 e rodar sem problemas.
Esse foi o resultado que obtive após rodar o programa na minha maquina.

Veja na seção de downloads o projeto completo de toda a aplicação.
Comentando a classe CheckVersion
A base do funcionamento do componente é a verificação de várias chaves no registro do Windows.
Usando informações existentes no MSDN, foi possível determinar quais chaves do registro devem ser lidas.
Verificando se a versao vX.X está instalada
Para exemplificar, vejamos como identificar a instalação da versão 1.1.
Definindo os caminhos para os nomes das chaves a serem verificadas e quais os valores contidos nessas chaves que nos interessam, fica fácil determinar a versão desejada.
private const string Net11KeyName = "Software\\Microsoft\\NET Framework Setup\\NDP\\v1.1.4322";
O exemplo acima define o nome da chave de acesso para saber se o Framework 1.1 foi instalado na maquina. Veja que alem do nome da chave é necessário saber qual o nome da sub-chave e o conteúdo que interessa nessa sub-chave.
public bool IsFramework11Installed()
{
// check if installed
if (ReadReg(Net11KeyName, NetRegValueName) == "1")
return true;
else
return false;
}
Veja que no trecho de código é feita a verificação da existência da chave e, caso seu conteudo seja “1”, pode-se concluir que o Framework 1.1 está instalado na maquina em questão. O mesmo procedimento é utilizado para as demais versões do framework.
Recuperando o valor da versão vX.X
O método para determinar o valor da versão instalada também é bastante simples. Para dar maior consistência, antes de recuperar o valor da versão, o método faz uma checagem para ver se a versão desejada está instalada na maquina.
public string GetFramework11Version()
{
string version = string.Empty;
if (IsFramework11Installed())
{
// get the installed version
version = ReadReg(Net11KeyVersion, Net11KeyVersionName);
if (!version.Equals("") && version.Contains(Net11KeyVersionName))
version = string.Concat("1.1.", Net11KeyVersionName);
}
return version;
}
Após checar se a versão está instalada, o método utiliza a chave definida em Net11KeyVersion e recupera seu valor.
private const string Net11KeyVersion = "Software\\Microsoft\\.NETFramework\\Policy\\v1.1";
O projeto contem o código fonte da classe CheckVersion e também um projeto teste para testar o componente.
O projeto pode ser executado no Visual Studio 2003 ou 2005. Veja que como o projeto foi gerado na versão 2005, se você for utilizar a versão 2003, terá que converter os arquivos sln e csproj já que a estrutura desses arquivos não é compatível com a versão 2003. Uma outra maneira de fazer isso é criar um projeto novo no 2003 e apenas adicionar o arquivo CheckVersion.cs no seu projeto.
Pontos de interesse
Utilizando essa mesma idéia, você pode checar e/ou recuperar outras informações sobre o framework como diretório instalado, idioma, etc e também informações sobre o Visual Studio.
Se puder, gaste algum tempo navegando pelas varias chaves relativas ao .Net Framework e verá que existem várias informações interessantes armazenadas no registro o que vai facilitar sua vida da próxima vez que precisas delas.
Autor: Carlos R. Lacerda
13-Fev-2006