Jak sprawdzić, czy jest zainstalowany dodatek .NET 3.5 SP1?

91

Jak mogę się dowiedzieć, czy dodatek SP1 został zainstalowany na serwerze z .NET 3.5?

Chłopak
źródło

Odpowiedzi:

18

Użyj Dodaj / Usuń programy z Panelu sterowania.

rp.
źródło
1
Domyśl. Później pomyślałem, że przegapiłem „programowo” punkt odniesienia do twojego pytania, Guy.
rp.
135

Popatrz HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Jedna z nich musi być prawdziwa:

  • VersionWartość tego klucza powinna być 3.5.30729.01
  • Lub SPwartość w tym samym kluczu powinna wynosić 1

W C # (zaczerpniętym z pierwszego komentarza) możesz zrobić coś w ten sposób:

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();
Promień
źródło
8
const string name = @ "SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey (nazwa); var version = subKey.GetValue ("Version"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Chris Craft
2
Na moim komputerze Versionjest 3.5.30729.5420i SPjest1
Kevin Smyth
2
W wierszu poleceń: 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
Pojawi się problem: jeśli użytkownik nie ma zainstalowanego .NET, w jaki sposób Twój program napisany w .NET działa, aby wykryć, czy .NET jest zainstalowany?
zwcloud
27

Możesz przejść do SmallestDotNet za pomocą IE z serwera. To powie ci wersję, a także zapewni link do pobrania, jeśli jesteś nieaktualny.

Andy May
źródło
4
Mówi tylko o najwyższej wersji, np. Jeśli masz 4, nie powie ci, czy masz również 3.5 sp 1
codeulike
12

Przyszedłem na tę stronę, próbując dowiedzieć się, jak wykryć wersje frameworka zainstalowane na serwerze bez dostępu do zdalnego pulpitu lub rejestru, więc odpowiedź Danny'ego V zadziałała.

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
źródło
Działało zgodnie z oczekiwaniami dla mnie. Właśnie utworzyłem nowy projekt strony internetowej, dodałem kod i umieściłem go w udziale, a następnie zażądałem strony.
Kris van der Mast
9

Zapoznaj się z tym artykułem, w którym przedstawiono klucze rejestru, których musisz szukać, i bibliotekę .NET, która zrobi to za Ciebie.

Najpierw należy sprawdzić, czy .NET 3.5 jest zainstalowany, sprawdzając plik HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install, który jest wartością DWORD. Jeśli ta wartość jest obecna i ustawiona na 1, ta wersja platformy jest zainstalowana.

Spójrz na HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP, która jest wartością DWORD, która wskazuje poziom dodatku Service Pack (gdzie 0 to brak dodatku Service Pack).

Aby mieć rację, naprawdę musisz najpierw upewnić się, że .NET Fx 2.0 i .NET Fx 3.0 są zainstalowane, a następnie sprawdzić, czy jest zainstalowany .NET 3.5. Jeśli wszystkie trzy są prawdziwe, możesz sprawdzić poziom dodatku Service Pack.

Scott Dorman
źródło
1
link do artykułu został zmieniony, tutaj jest nowa lokalizacja: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake
5

Sprawdź, czy istnieje następujący katalog:

Na komputerach 64-bitowych:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Na komputerach 32-bitowych:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Gdzie% SYSTEMROOT% jest zmienną środowiskową SYSTEMROOT (np. C: \ Windows).

Danny Varod
źródło
2

Zakładając, że wszędzie występuje nazwa „Microsoft .NET Framework 3.5 SP1”, możesz użyć tego:

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
źródło
+1, jak dotąd najłatwiejszy sposób programowego sprawdzenia, czy jest zainstalowany 3.5 SP1 - właściwie, czy zadziałał. Próbowałem, nie działa na mnie, zawsze zwraca fałsz.
Evgeniy Berezovsky
Przeglądając kolekcję zwróconą przez GetSubKeyNames (), w przypadku niektórych produktów używana jest zwykła nazwa tekstowa, w przypadku niektórych - takich jak frameworki .net - używane są identyfikatory produktów {1ea1f -...}. Dlatego nie można go znaleźć.
Evgeniy Berezovsky