Podobne pytanie zostało zadane tutaj , ale dotyczyło .NET 3.5. W szczególności szukam następujących rzeczy:
- Jaki jest prawidłowy sposób ustalenia, które wersje .NET Framework i dodatki Service Pack są zainstalowane?
- Czy istnieje lista kluczy rejestru, których można użyć?
- Czy są jakieś zależności między wersjami Framework?
.net
installation
version-detection
Scott Dorman
źródło
źródło
Odpowiedzi:
Rejestr jest oficjalnym sposobem wykrywania, czy zainstalowana jest konkretna wersja Framework.
Które klucze rejestru są potrzebne, zmieniaj się w zależności od wersji Framework, której szukasz:
Na ogół szukasz:
z wyjątkiem .NET 1.0, gdzie wartością jest string (
REG_SZ
) zamiast number (REG_DWORD
).Określanie poziomu dodatku Service Pack odbywa się w podobny sposób:
Jak widać, określanie poziomu SP dla zmian .NET 1.0 zmienia się, jeśli używasz Windows Media Center lub Windows XP Tablet Edition. Ponownie .NET 1.0 używa wartości ciągu, podczas gdy wszystkie inne używają DWORD.
W przypadku .NET 1.0 wartość ciągu w jednym z tych kluczy ma format #, #, ####, #. Ostatni # to poziom dodatku Service Pack.
Chociaż nie prosiłem o to wyraźnie, jeśli chcesz znać dokładny numer wersji środowiska, możesz użyć tych kluczy rejestru:
Ponownie .NET 1.0 używa wartości ciągu, podczas gdy wszystkie inne używają DWORD.
Dodatkowe uwagi
dla .NET 1.0 wartość ciągu w jednym z tych kluczy ma format
#,#,####,#
.#,#,####
Część napisu jest wersja Framework.w przypadku .NET 1.1 używamy samej nazwy klucza rejestru, która reprezentuje numer wersji.
Na koniec, jeśli spojrzysz na zależności, .NET 3.0 dodaje dodatkową funkcjonalność do .NET 2.0, więc zarówno .NET 2.0, jak i .NET 3.0 muszą ewaluować jako zainstalowane, aby poprawnie powiedzieć, że .NET 3.0 jest zainstalowany. Podobnie .NET 3.5 dodaje dodatkowe funkcje do .NET 2.0 i .NET 3.0, więc .NET 2.0, .NET 3.0 i .NET 3. powinny ocenić, czy są zainstalowane, aby poprawnie powiedzieć, że .NET 3.5 jest zainstalowany.
.NET 4.0 instaluje nową wersję CLR (CLR wersja 4.0), która może działać równolegle z CLR 2.0.
Aktualizacja dla .NET 4.5
W
v4.5
rejestrze .NET 4.5 nie będzie klucza. Zamiast tego musisz sprawdzić, czyHKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full
klucz zawiera wartość o nazwieRelease
. Jeśli ta wartość jest obecna, to .NET 4.5 jest zainstalowany, w przeciwnym razie nie będzie. Więcej informacji można znaleźć tutaj i tutaj .źródło
Oficjalna odpowiedź Microsoft na to pytanie znajduje się w następującym artykule bazy wiedzy:
Identyfikator artykułu: 318785 - Ostatni przegląd: 7 listopada 2008 r. - Wersja: 20.1 Jak ustalić, które wersje systemu .NET Framework są zainstalowane i czy zastosowano dodatki Service Pack
Niestety nie działa, ponieważ wersja mscorlib.dll w katalogu 2.0 ma wersję 2.0 i nie ma wersji mscorlib.dll w katalogach 3.0 lub 3.5, mimo że 3.5 SP1 jest zainstalowany ... dlaczego czy oficjalna odpowiedź Microsoft byłaby tak źle poinformowana?
źródło
Framework 4 beta instaluje się na innym kluczu rejestru.
źródło
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP", true)
abyRegistry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP")
uniknąć wyjątku bezpieczeństwa dla użytkowników niebędących administratorami.Chciałem wykryć obecność .NET w wersji 4.5.2 zainstalowanej w moim systemie i nie znalazłem lepszego rozwiązania niż ASoft .NET Version Detector .
Migawka tego narzędzia pokazująca różne wersje .NET:
źródło
Wymień podklucze
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
. Każdy podklucz jest wersją .NET . Powinien miećInstall=1
wartość, jeśli jest obecna na komputerze, wartość SP pokazującą dodatek Service Pack iMSI=1
wartość, jeśli została zainstalowana przy użyciu MSI. (.NET 2.0 w systemie Windows Vista nie ma na przykład ostatniego, ponieważ jest częścią systemu operacyjnego).źródło
W 64-bitowym systemie operacyjnym ścieżka wyglądałaby następująco:
źródło
Wow6432Node
Klucz rejestru jest częścią odbłyśnika rejestru WOW64, który lusterka pewne klucze i wartości między 64-bitowych i 32-bitowych widokiem rejestru. Bezpośredni dostęp do tego klucza nie powinien być konieczny, ponieważ rejestr automatycznie obsługuje przekierowanie i dublowanie.Aktualizacja dla .NET 4.5.1
Teraz, gdy .NET 4.5.1 jest dostępny, należy sprawdzić rzeczywistą wartość klucza o nazwie Release w rejestrze, a nie tylko jego istnienie. Wartość 378758 oznacza, że .NET Framework 4.5.1 jest zainstalowany. Jednak, jak opisano tutaj, ta wartość to 378675 w systemie Windows 8.1.
źródło
Dostępne jest narzędzie GUI, ASoft .NET Version Detector , który zawsze był wysoce niezawodny. Może tworzyć pliki XML, podając w wierszu poleceń nazwę pliku wyjściowego XML.
Możesz użyć tego do automatyzacji. Jest to mały program napisany w języku innym niż .NET i nie wymaga instalacji.
źródło
Musiałem dowiedzieć się, którą wersję środowiska .NET miałem na swoim komputerze, i wystarczyłem przejść do panelu sterowania i wybrać opcję „Odinstaluj program”. Następnie posortowałem programy według nazwy i znalazłem profil klienta Microsoft .NET Framework 4.
źródło
Oto skrypt PowerShell w celu uzyskania zainstalowanych wersji środowiska .NET
Został napisany w oparciu o: Jak ustalić, które wersje .NET Framework są zainstalowane . Użyj funkcji THE Get-FrameworkVersion (), aby uzyskać informacje o zainstalowanych wersjach środowiska .NET.
źródło
Korzystając z biblioteki Signum.Utilities z SignumFramework (z której można korzystać autonomicznie), można uzyskać ją ładnie i bez samodzielnego zajmowania się rejestrem:
źródło
Zobacz : Określanie, które wersje .NET Framework są zainstalowane (MSDN).
MSDN proponuje jeden przykład funkcji, która wydaje się wykonywać zadanie dla wersji 1-4. Zgodnie z artykułem dane wyjściowe metody to:
Zauważ, że dla „wersji 4.5 i nowszych” istnieje inna funkcja.
źródło
W systemie Windows 7 (powinien działać również w systemie Windows 8, ale go nie testowałem):
Przejdź do wiersza polecenia
Kroki, aby przejść do wiersza polecenia:
W cmd wpisz to polecenie
To daje najnowszą zainstalowaną wersję NET Framework.
Można również wypróbować narzędzia Raymond.cc Utilties .
źródło
cmd
daje miERROR: Description = Invalid namespace
.ERROR: Description = Invalid namespace