Como posso saber se o .NET 3.5 SP1 está instalado?

91

Como posso saber se o SP1 foi instalado em um servidor com .NET 3.5?

Cara
fonte

Respostas:

18

Use Adicionar / Remover programas no Painel de Controle.

rp.
fonte
1
Vai saber. Mais tarde, pensei ter perdido um ponto "programaticamente" em sua pergunta, Guy.
rp.
135

Olhe para HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Um destes deve ser verdadeiro:

  • O Versionvalor dessa chave deve ser 3.5.30729.01
  • Ou o SPvalor na mesma chave deve ser 1

Em C # (retirado do primeiro comentário), você poderia fazer algo ao longo destas linhas:

const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5";
RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name);
var version = subKey.GetValue("Version").ToString();
var servicePack = subKey.GetValue("SP").ToString();
Raio
fonte
8
const string name = @ "SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey (nome); var version = subKey.GetValue ("Version"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Chris Craft
2
Na minha máquina, Versioné 3.5.30729.5420e SPé1
Kevin Smyth
2
Na linha de comando: reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V Version reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V SP
Kevin Smyth
Haverá um problema: se um usuário não tiver o .NET instalado, como seu programa escrito com o .NET será executado para detectar se o .NET está instalado?
zwcloud
27

Você pode ir para SmallestDotNet usando o IE do servidor. Isso informará a versão e também fornecerá um link para download se você estiver desatualizado.

Andy May
fonte
4
Porém, apenas informa a versão mais alta, por exemplo, se você tiver 4, não dirá se você também tem 3,5 sp 1
codeulike
12

Cheguei a esta página enquanto tentava descobrir como detectar as versões do framework instaladas em um servidor sem acesso à área de trabalho remota ou registro, então a resposta de Danny V funcionou para mim.

string path = System.Environment.SystemDirectory;
path = path.Substring( 0, path.LastIndexOf('\\') );
path = Path.Combine( path, "Microsoft.NET" );
// C:\WINDOWS\Microsoft.NET\

string[] versions = new string[]{
    "Framework\\v1.0.3705",
    "Framework64\\v1.0.3705",
    "Framework\\v1.1.4322",
    "Framework64\\v1.1.4322",
    "Framework\\v2.0.50727",
    "Framework64\\v2.0.50727",
    "Framework\\v3.0",
    "Framework64\\v3.0",
    "Framework\\v3.5",
    "Framework64\\v3.5",
    "Framework\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework64\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework\\v4.0",
    "Framework64\\v4.0"
};

foreach( string version in versions )
{
    string versionPath = Path.Combine( path, version );

    DirectoryInfo dir = new DirectoryInfo( versionPath );
    if( dir.Exists )
    {
        Response.Output.Write( "{0}<br/>", version );
    }
}
Matt
fonte
Funcionou como esperado para mim. Acabei de criar um novo projeto de site, adicionar o código e colocá-lo no compartilhamento, em seguida, solicitou a página.
Kris van der Mast
9

Dê uma olhada neste artigo que mostra as chaves de registro que você precisa procurar e fornece uma biblioteca .NET que fará isso para você.

Primeiro, você deve determinar se o .NET 3.5 está instalado observando HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install, que é um valor DWORD. Se esse valor estiver presente e definido como 1, essa versão do Framework está instalada.

Observe HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP, que é um valor DWORD que indica o nível do Service Pack (onde 0 é nenhum service pack).

Para estar correto sobre as coisas, você realmente precisa garantir que .NET Fx 2.0 e .NET Fx 3.0 sejam instalados primeiro e, em seguida, verificar se o .NET 3.5 está instalado. Se todos os três forem verdadeiros, você pode verificar o nível do service pack.

Scott Dorman
fonte
1
o link do artigo foi alterado, aqui está o novo local: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake
5

Verifique se o seguinte diretório existe:

Em máquinas de 64 bits:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Em máquinas de 32 bits:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Onde% SYSTEMROOT% é a variável de ambiente SYSTEMROOT (por exemplo, C: \ Windows).

Danny Varod
fonte
2

Supondo que o nome esteja em todo lugar "Microsoft .NET Framework 3.5 SP1", você pode usar isto:

string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
    return rk.GetSubKeyNames().Contains("Microsoft .NET Framework 3.5 SP1");
}
Panos
fonte
+1, a maneira mais fácil de verificar programaticamente se o 3.5 SP1 está instalado - na verdade, se funcionou. Eu tentei, não funciona para mim, sempre retorna falso.
Eugene Beresovsky
Percorrendo a coleção retornada por GetSubKeyNames (), o nome de texto simples é usado para alguns produtos, para alguns - como as estruturas .net, os ids de produto {1ea1f -...} estão sendo usados. É por isso que não pode ser encontrado.
Eugene Beresovsky