2012-12-29 17 views
5

Buduję wtyczkę ExcelDNA, która wymaga pełnej wersji .Net (4.0 lub 3.5) (używam niektórych części System.Web). Z tego powodu użytkownicy, którzy mają tylko wersję klienta, otrzymują błędy.Sprawdź, czy zainstalowana jest pełna wersja .net?

Lubię wyświetlać użytkownikom komunikat "pobierz najnowszą wersję" przy uruchomieniu, jeśli zainstalowana jest tylko wersja klienta.

Czy jest jakiś niezawodny sposób sprawdzenia, czy zainstalowana jest pełna wersja? W googlowaniu wydaje się, że wiele osób zaleca sprawdzanie rejestru, ale wydaje się, że jest on podatny na błędy, ponieważ istnieje wiele wersji .Net. W takim przypadku, co ścieżki muszę sprawdzić budować:

bool IsFullDotNetVersion() 
{ 

} 

Byłoby możliwe/dobry pomysł, aby sprawdzić istnienie dla funkcji, które jest dostępne tylko w pełnej wersji? To znaczy. Czy możliwe jest sprawdzenie, czy System.Web jest obecny w środowisku? (nie ma w wersji klienta .Net praw??)

Jako pytanie poboczne: Jak mogę łatwo przetestować moją aplikację z inną wersją .net zainstalowaną w moim systemie. Czy jest jakiś przełącznik .Net?

+0

Musisz przeczytać ustawienia rejestru. Sprawdź [to] (http://stackoverflow.com/a/199783/649524) doskonała odpowiedź – Tilak

+0

Nie pytam, jakie są zainstalowane wersje .net. Pytam, czy zainstalowana jest pełna wersja, czy nie. Ten wpis nie odpowiada, jakie dokładnie klucze rejestru muszę sprawdzić, aby to ustalić. –

+0

Możesz sprawdzić ustawienia rejestru pełnego .NET – Tilak

Odpowiedz

2

Sprawdź w GAC, czy jest dostępny System.Web (lub jakikolwiek inny potrzebny zestaw).

Oto kod, który works on my machine.

private static const string BasePath = @"c:\windows\assembly"; 

public static bool HasDotNetFullversion() 
{ 
    var gacFolders = new List<string>() 
    { 
     "GAC", "GAC_32", "GAC_64", "GAC_MSIL", 
     "NativeImages_v2.0.50727_32", "NativeImages_v2.0.50727_64" 
    }; 

    var assemblyFolders = from gacFolder in gacFolders 
          let path = Path.Combine(BasePath, gacFolder) 
          where Directory.Exists(path) 
          from directory in Directory.GetDirectories(path) 
          select directory; 

    var hasSystemWeb = assemblyFolders.Any(x => 
     x.EndsWith("system.web", StringComparison.InvariantCultureIgnoreCase)); 
} 
1

Prawdopodobny duplikat. How to detect what .NET Framework versions and service packs are installed? krótka odpowiedź brzmi, że trzeba przeczytać rejestr

+0

Tak, ale jakie klucze rejestru ?. Dla .net 4.0 jest jasne, ale dla .net 3.5? –

+0

Po kliknięciu łącza w powyższym komentarzu zobacz tabelę, do której następuje odwołanie. Ogólnie rzecz biorąc instalatorzy zajmują się kwestią sprawdzania ram i zalecam, abyś skorzystał z nich. Zajmują się również problemami z odinstalowaniem. –

+0

@NielsBosma: Wersja szkieletowa klienta została udostępniona po raz pierwszy w wersji 4.0. Możesz przejrzeć następujące informacje: http://msdn.microsoft.com/en-us/library/bb822049.aspx i http://msdn.microsoft.com/en-us/library/hh925568.aspx, a także dostarczony mikrofon łącza. – NotMe

0

Sugeruję, że zamiast próbować wykryć, która wersja .net komputera klienta, możesz po prostu pakować pełny. Instalator .net do programu instalacyjnego.

Innymi słowy, wykryj go w momencie instalacji i podejmij odpowiednie działania. Jest to zwykle stosowany sposób radzenia sobie z potencjalnie brakującymi częściami ramy.

+1

Ponieważ jest to wtyczka do programu Excel, nie zapewniam instalatora. To drag & drop, gdy chcesz korzystać z wtyczki. –

Powiązane problemy