Wie kann ich feststellen, ob .NET 3.5 SP1 installiert ist?

91

Wie kann ich herausfinden, ob SP1 auf einem Server mit .NET 3.5 installiert wurde?

Kerl
quelle

Antworten:

18

Verwenden Sie Software in der Systemsteuerung.

rp.
quelle
1
Stelle dir das vor. Später dachte ich, ich hätte einen "programmatischen" Punkt auf Ihre Frage verpasst, Guy.
rp.
135

Schau dir an HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Eines davon muss wahr sein:

  • Der VersionWert in diesem Schlüssel sollte 3.5.30729.01 sein
  • Oder der SPWert im selben Schlüssel sollte 1 sein

In C # (aus dem ersten Kommentar entnommen) können Sie Folgendes tun:

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();
Strahl
quelle
8
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 ();
Chris Craft
2
Auf meiner Maschine Versionist 3.5.30729.5420und SPist1
Kevin Smyth
2
Auf der Kommandozeile: 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
Es wird ein Problem auftreten: Wenn ein Benutzer .NET nicht installiert hat, wie wird Ihr mit .NET geschriebenes Programm ausgeführt, um festzustellen, ob .NET installiert ist?
Zwcloud
27

Sie können mit dem IE vom Server zu SmallestDotNet wechseln. Das wird Ihnen die Version mitteilen und auch einen Download-Link bereitstellen, wenn Sie veraltet sind.

Andy May
quelle
4
Sagt Ihnen jedoch nur die höchste Version, z. B. wenn Sie 4 haben, sagt es Ihnen nicht, ob Sie auch 3.5 sp 1 haben
codeulike
12

Ich bin auf diese Seite gekommen, als ich versucht habe, herauszufinden, wie die auf einem Server installierten Framework-Versionen ohne Zugriff auf Remotedesktop oder Registrierung erkannt werden können. Die Antwort von Danny V hat also für mich funktioniert.

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
quelle
Arbeitete wie erwartet für mich. Ich habe gerade ein neues Website-Projekt erstellt, den Code hinzugefügt und auf die Freigabe gesetzt und dann die Seite angefordert.
Kris van der Mast
9

Schauen Sie sich diesen Artikel an, der die Registrierungsschlüssel zeigt, nach denen Sie suchen müssen, und eine .NET-Bibliothek bereitstellt, die dies für Sie erledigt.

Zunächst sollten Sie feststellen, ob .NET 3.5 unter HKLM \ Software \ Microsoft \ NET Framework-Setup \ NDP \ v3.5 \ Install installiert ist. Dies ist ein DWORD-Wert. Wenn dieser Wert vorhanden und auf 1 gesetzt ist, wird diese Version des Frameworks installiert.

Sehen Sie sich HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP an. Dies ist ein DWORD-Wert, der die Service Pack-Ebene angibt (wobei 0 kein Service Pack ist).

Um dies zu korrigieren, müssen Sie zuerst sicherstellen, dass .NET Fx 2.0 und .NET Fx 3.0 installiert sind, und dann überprüfen, ob .NET 3.5 installiert ist. Wenn alle drei zutreffen, können Sie nach dem Service Pack-Level suchen.

Scott Dorman
quelle
1
Artikel Link wurde geändert, hier ist es der neue Ort: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake
5

Überprüfen Sie, ob das folgende Verzeichnis vorhanden ist:

Auf 64-Bit-Computern:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Auf 32-Bit-Computern:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Dabei ist% SYSTEMROOT% die Umgebungsvariable SYSTEMROOT (z. B. C: \ Windows).

Danny Varod
quelle
2

Angenommen, der Name lautet überall "Microsoft .NET Framework 3.5 SP1", können Sie Folgendes verwenden:

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
quelle
+1, der bisher einfachste Weg, programmgesteuert zu überprüfen, ob 3.5 SP1 installiert ist - tatsächlich, ob es funktioniert hat. Ich habe es versucht, es funktioniert bei mir nicht, es gibt immer false zurück.
Eugene Beresovsky
Beim Durchblättern der von GetSubKeyNames () zurückgegebenen Sammlung wird der Klartextname für einige Produkte verwendet, für einige - wie bei den .net-Frameworks werden die Produkt-IDs {1ea1f -...} verwendet. Deshalb kann es nicht gefunden werden.
Eugene Beresovsky