Jak sprawdzić obecną w systemie wersję .NET’a?

Większość aplikacji pisanych w .NET, korzysta z funkcji udostępnianych przez ten framework od wersji 4.0, lub starszej. Dlaczego? Zapewne dlatego, że wersja ta zawiera właściwie 90% rzeczy, które są nam do szczęścia potrzebne. Dodatkowym atutem pisania aplikacji w wersji 4.0 tego frameworka, jest fakt, że to ostatnia wersja dostępna dla Windowsa XP. Jednak co w przypadku, kiedy zdecydujemy się porzucić starego XP’ka  i skorzystać z nowych funkcji, jakie wnosi .NET 4.5? Okazuje się, że napotkamy na mały problem… Jaki? Dowiesz się czytając dalej 😉

.NET 4.0, 4.5… a co to za różnica?

Aby w pełnie zobrazować problem, stwórzmy sobie przykładową aplikację WPF przeznaczoną dla .NET’a w wersji 4.5.2. Jest to zresztą wersja domyślna, ustawiana przez Visual Studio dla nowo utworzonych projektów:

aa

W jej kodzie użyjmy funkcji dostępniej, w .NET od wersji 4.5. Będzie to wykonywanie metody asynchronicznej – rzecz o tyle fajna, że kod naszej metody będzie „czekał” na zakończenie się zadania wykonywanego w osobnym wątku, bez zamrażania wątku głównego aplikacji:

Uruchamiamy naszą aplikację pod Visual Studio, póki co wszystko działa tak jak należy:

app

Teraz zaczną dziać się rzeczy dziwne 😉 Aplikacja jest gotowa do użycia, wszystko działa, jednak trafia na komputer z zainstalowanym .NET’em w wersji 4.0. Teoretycznie aplikacja nie powinna się tam w ogóle uruchomić. Czy tak faktycznie będzie? Moje doświadczenie pokazuje, że nie koniecznie…

app45

No okej, aplikacja się uruchomiła i działa. Jednak na wersji starszej, niż ta dla której aplikacja została skompilowana! Sprawdźmy co się stanie, po kliknięciu przycisku, który wywoła funkcję zawartą w .NET 4.5:

app452

Aplikacja się wysypała… W sumie, to było do przewidzenia. Jednak nieświadomy użytkownik nie będzie miał pojęcia o co chodzi. W końcu program się włączył, a tu nagle coś nie działa… Pierwsza myśl: Twórca aplikacji musiał coś popsuć – a problem przecież nie leży w niej.

Co ciekawe, jeżeli w systemie zainstalowana jest wersja 3.5, lub starsza problemu nie ma. Jednak komunikat, który zostanie wyświetlony sugeruje instalację .NET’a 4.0, a nie 4.5…

40

To jednak wyjaśnia, dlaczego aplikacja uruchamia się na systemie z zainstalowanym .NET 4.0, chociaż nie powinna. Czyżby niedopatrzenie zespołu odpowiedzialnego za .NET Framework’a?

Rozwiązanie problemu: Ręczne sprawdzanie obecnej w systemie wersji .NET’a

Jednym rozwiązaniem wyżej przedstawionego problemu jest nie używanie funkcji dostępnych tylko w wersjach 4.5 i wyżej. Wtedy aplikacja przeznaczona dla wersji 4.5, będzie działać na wersji 4.0… Jednak nie po to kompilujemy aplikację dla wersji 4.5, żeby nie używać tego co nam udostępnia… Co w takim razie zrobić? Trzeba po prostu sprawdzić, jaką wersją frameworka dysponuje system, na którym aplikacja jest uruchamiana. Do tego celu, z powodzeniem można wykorzystać poniższą klasę:

Sprawdza ona, czy obecny jest w systemie .NET w wersji 4.5 lub nowszej – jeżeli tak, to metoda zwraca wartość true, jeżeli nie to false. Jej użycie jest bardzo proste:

Ten fragment należy umieścić oczywiście na samym początku kodu naszego programu. W przypadku braku .NET 4.5 w systemie efekt jego działania będzie taki:

msg

Po wyświetleniu informacji program zostaje zamknięty. Dopóki użytkownik nie zainstaluje wymaganego składnika to programu nie uruchomi – i właśnie o to chodzi 😉

Na koniec zachęcam do polubienia fanpage bloga na facebooku, jeżeli jeszcze tego nie zrobiłeś 😉

1,733 total views, 3 views today

2 przemyślenia nt. „Jak sprawdzić obecną w systemie wersję .NET’a?

    • Super, że podesłałeś linka 😉 Cóż, wszelkie informacje trzeba wyciągać z rejestru… Widzę, że twoje rozwiązanie też na tym bazuje. Z tą różnicą, że jest bardziej rozbudowane + sprawdza paczkę z językiem. Jednakże, do rozwiązania problemu opisanego we wpisie, kod przedstawiony przeze mnie powinien w zupełności wystarczyć.

      Pozdrawiam! 🙂

Możliwość komentowania jest wyłączona.