To pytanie nie tyle jest związane z programowaniem, ile z wdrażaniem.
Często rozmawiam z grupą w mojej firmie, której zadaniem jest utrzymywanie naszych produkcyjnych serwerów Windows i wdrażanie na nich naszego kodu. Ze względów prawnych i związanych ze zgodnością nie mam bezpośredniego wglądu w serwery ani żadnej kontroli nad serwerami, więc jedynym sposobem, w jaki mogę sprawdzić, które wersje .NET są zainstalowane na którymkolwiek z nich, są wskazówki, które udzielam tej grupie.
Do tej pory wszystkie metody, które przychodzą mi do głowy, aby stwierdzić, które wersje są zainstalowane (sprawdź, czy narzędzia administracyjne pasują do 1.1 lub 2.0, sprawdź wpisy na liście „Dodaj / usuń programy”, sprawdź, czy istnieją katalogi w c: \ Windows \ Microsoft.NET) są wadliwe (widziałem co najmniej jedną maszynę z wpisami 2.0, ale bez wpisów 2.0 w Narzędziach administracyjnych - i ta metoda nie mówi nic o 3.0+, liście "Dodaj / Usuń programy" może stracić synchronizację z rzeczywistością, a istnienie katalogów niekoniecznie musi cokolwiek oznaczać).
Biorąc pod uwagę, że generalnie muszę wiedzieć, że te rzeczy są na miejscu z wyprzedzeniem (odkrycie, że „Ups, ten nie ma wszystkich wersji i dodatków Service Pack, których potrzebujesz” nie działa dobrze z krótkimi oknami serwisowymi) i muszę sprawdzać „przez proxy”, ponieważ nie mogę uzyskać bezpośredniego dostępu do serwerów. Jaki jest niezawodny sposób sprawdzenia, które wersje .NET są zainstalowane na produkcyjnym serwerze Windows? Najlepiej jest to zrobić za pomocą tego, co instaluje framework, ponieważ będzie to szybsze i nie będzie wymagało załadowania jakiegoś narzędzia, a także metody, która z pewnością zawiedzie, jeśli frameworki nie są poprawnie zainstalowane, ale nadal mają pliki na miejscu (tj. , istnieje katalog, w którym znajduje się plik gacutil.exe, ale ta wersja frameworka nie jest tak naprawdę „zainstalowana”)
EDYCJA: Wobec braku dobrego, niezawodnego, wewnętrznego sposobu zrobienia tego wbudowanego w Framework (y), czy ktoś zna dobry, lekki, niewymagający instalacji program, który może to sprawdzić? Mogę sobie wyobrazić, że ktoś mógłby z łatwością taki napisać, ale jeśli już istnieje, byłoby jeszcze lepiej.
źródło
Odpowiedzi:
Powinieneś otworzyć IE na serwerze, dla którego szukasz tych informacji i przejść do tej strony: http://www.hanselman.com/smallestdotnet/
To wszystko, czego potrzeba.
Witryna zawiera skrypt, który wygląda jak „UserAgent” przeglądarki i ustala, jaką wersję (jeśli w ogóle) systemu .NET Framework masz (lub nie masz) zainstalowaną, i wyświetla ją automatycznie (a następnie oblicza całkowity rozmiar, jeśli wybierzesz aby pobrać .NET Framework).
źródło
Możesz programowo sprawdzić rejestr i kilka innych rzeczy, zgodnie z tym wpisem w blogu .
Klucz rejestru do obejrzenia to
źródło
Znaleziona odpowiedź stąd :
Otwórz wiersz polecenia i skopiuj i wklej jedną z poniższych linii poleceń
lub
źródło
Zgodnie z odpowiedzią CodeTrawler , rozwiązaniem jest wpisanie w oknie eksploratora:
Następnie wyszukaj:
... i kliknij prawym przyciskiem myszy / przejdź do karty wersji dla każdego wyniku.
źródło
Sposób firmy Microsoft jest następujący:
MSDN: jak ustalić, które wersje .NET Framework są zainstalowane (co kieruje do następującego klucza rejestru:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\...
)Jeśli chcesz niezawodności, to inna sprawa. Nie martwiłbym się o kopię zapasową folderu frameworka. Gdyby ktoś to zrobił, uznałbym komputer za zepsuty.
Najbardziej niezawodnym sposobem byłoby napisanie małego programu korzystającego z każdej wersji .NET i bibliotek, na których Ci zależy, i uruchomienie ich.
W przypadku metody bez instalacji PowerBasic jest doskonałym narzędziem. Tworzy małe pliki exe, które nie są wymagane w czasie wykonywania. Może zautomatyzować kontrole opisane w artykule bazy wiedzy MS powyżej.
źródło
http://www.asoft.be/prod_netver.html
Użyj tego „dobrego, lekkiego, niewymagającego instalacji programu”
źródło
Jeśli na komputerze, który chcesz sprawdzić, jest zainstalowany zestaw .NET SDK, możesz użyć wiersza polecenia zestawu SDK i uruchomić program
CLRVer.exe
.źródło
Oficjalna odpowiedź firmy Microsoft, jak to zrobić, znajduje się w artykule KB 318785 .
źródło
Wdrożenie OneTouch wykona wykrywanie i instalację wymagań wstępnych. Prawdopodobnie najlepiej jest skorzystać z gotowego rozwiązania niż próbować rozwinąć własne. Próba zmiany własnej może prowadzić do problemów, ponieważ cokolwiek wprowadzisz, może się zmienić wraz z poprawką lub dodatkiem Service Pack. Prawdopodobnie Microsoft ma pewną heurystykę do określania, która wersja jest uruchomiona.
źródło
Oficjalny sposób wykrywania .NET 3.0 jest opisany tutaj
http://msdn.microsoft.com/en-us/library/aa480198.aspx
Usterka, ponieważ wymaga od dzwoniącego posiadania uprawnień dostępu do rejestru.
MSDN wspomina również o technice wykrywania .NET 3.5, sprawdzając ciąg agenta użytkownika:
http://msdn.microsoft.com/en-us/library/bb909885.aspx
Myślę, że Microsoft powinien był wykonać lepszą robotę niż to.
źródło
Zobacz także pytanie o przepełnienie stosu Jak wykryć, które wersje .NET Framework i dodatki Service Pack są zainstalowane? który również wspomina:
Numer ID artykułu: 318785 - Ostatnia weryfikacja: 7 listopada 2008 r. - Weryfikacja: 20.1 Jak ustalić, które wersje .NET Framework są zainstalowane i czy zostały zastosowane dodatki Service Pack.
Niestety wygląda na to, że nie działa, ponieważ
mscorlib.dll
wersja w katalogu 2.0 ma wersję 2.0 i nie mamscorlib.dll
wersji ani w katalogach 3.0, ani 3.5, mimo że jest zainstalowany 3.5 SP1 ... Dlaczego oficjalna odpowiedź Microsoft miałaby brzmieć tak źle poinformowany?źródło
Aby określić, czy Twój serwer obsługuje .NET Framework 4.5 i nowsze wersje (testowane do 4.5.2): Jeśli nie masz dostępu do rejestru na serwerze , ale masz prawa do publikowania aplikacji na tym serwerze, utwórz aplikację MVC 5 z prostym kontroler, na przykład ten:
Następnie w pliku Web.config przejdź przez żądane wersje platformy .NET Framework w poniższej sekcji, zmieniając odpowiednio
targetFramework
wartości:Opublikuj każdy cel na swoim serwerze, a następnie przejdź do
<app deploy URL>/Default
. Jeśli twój serwer obsługuje platformę docelową, prosty ciąg zostanie wyświetlony z twojego trywialnego kontrolera. Jeśli nie, pojawi się błąd podobny do następującego:W tym przypadku mój serwer docelowy nie obsługuje jeszcze .NET Framework 4.5.2.
źródło
Aby pobrać zainstalowaną wersję dotnet,
Utwórz aplikację konsoli. Dodaj tę klasę Uruchom to
źródło
O dziwo, napisałem kod, aby to zrobić, kiedy pojawiło się 1.1 (co to było, siedem lat temu?) I trochę go poprawiłem, kiedy pojawiło się 2.0. Nie patrzyłem na to od lat, ponieważ nie zarządzamy już naszymi serwerami.
Nie jest to niezawodny, ale i tak go publikuję, ponieważ uważam to za zabawne; ponieważ jest to łatwiejsze do zrobienia w .NET i jeszcze łatwiejsze w Power Shell.
źródło
Cóż, jak powiedział Dean, możesz spojrzeć na rejestr i zrobić to, co zrobił. Aby sprawdzić, czy rzeczywiście ma zainstalowane środowisko CLR .NET Framework, należy poszukać
MSCorEE.dll
pliku w%SystemRoot%\System32
katalogu.źródło
To prawdopodobnie nieprzyjemny sposób na znalezienie wersji, ale zawsze miałem wrażenie, że wszystkie wersje zostały zainstalowane
<root>:\WINDOWS\Microsoft.NET\Framework
.Zapewnia to foldery o nazwach,
v2.0.50727
które moim zdaniem zawierają szczegółowe informacje o wersji.źródło
Jeśli chcesz znaleźć wersje wcześniejsze niż .NET 4.5, użyj kodu dla aplikacji konsoli. Lubię to:
W przeciwnym razie możesz znaleźć .NET 4.5 lub nowszy, wykonując takie zapytanie:
Następnie wynik konsoli powie Ci, które wersje są zainstalowane i dostępne do użytku z Twoimi wdrożeniami. Ten kod jest również przydatny, ponieważ masz je jako zapisane rozwiązania w dowolnym momencie, gdy chcesz to sprawdzić w przyszłości.
źródło
Wszedłem do Windows Update i spojrzałem na historię aktualizacji, wiedząc, że łatanie serwera jest aktualne. Przeskanowałem w poszukiwaniu aktualizacji .NET i pokazało mi dokładnie, które wersje mają aktualizacje, co pozwoliło mi stwierdzić, które wersje zostały zainstalowane.
źródło
Uważam, że ten jest całkiem przydatny. tutaj jest źródło
źródło