2009-02-27 15 views
9

Ostatnio zapytałem if you can detect from the application if .NET is installed (aby aplikacja nie uległa awarii z ogólnym błędem wyjątku).Jak zawodzić z wdziękiem, jeśli .NET nie jest zainstalowany?

Odpowiedź wydaje się być zwykłym "nie". Nadal chcę być w stanie wyjść z wdziękiem, jeśli .NET nie jest zainstalowany, czy jest jakiś sposób to zrobić?

Należy pamiętać, że nie chcę zmieniać nazwy pliku wykonywalnego, co oznacza, że ​​dobrze jest mieć niezarządzalny plik wykonywalny, który robi test, a dll ma prawdziwy program .NET, ale nie ma plików wykonywalnych.

Edycja: Nie mam na myśli niepowodzenia od instalatora, nie ma instalatora, tylko plik wykonywalny. Oczywiście jest to mało prawdopodobne, ale mimo to chciałbym to sprawdzić.

+4

Dlaczego nie użyć instalatora? Wtedy ten problem zniknie. –

Odpowiedz

3

Masz dwie opcje:

  • napisać mały rodzimy kod ładujący, który sprawdza na starcie i wykonuje swoje oprogramowanie, jeśli zainstalowano środowisko wykonawcze. W przeciwnym razie może to po prostu dać użytkownikowi komunikat o błędzie, należy kierować go do pobierania lokalizacji dla wykonywania, itp

LUB

  • Upewnij się, że instalator instaluje moduł wykonawczy. Joe Coehorn wspomniał, że byłoby to łatwe z MSI w this post i powinieneś być w stanie to zrobić z innymi instalatorami, takimi jak InnoSetup. Oczywiście, jeśli ktoś najpierw zainstaluje oprogramowanie, a następnie ponownie zainstaluje system Windows, a następnie spróbuje uruchomić aplikację bez jej ponownego instalowania, ulegnie awarii.

Oczywiście można połączyć oba elementy dla najlepszego z obu światów.

-2

Wystarczy przedstawić ładny komunikat, że nie jest zainstalowany i oferuje go do pobrania. Większość instalatorów pozwoli ci to zrobić mimo to.

+0

Tak, ale jak mam to zrobić BEZ framework .NET? –

+1

Jeśli utworzysz instalator za pomocą VS200 *, zrobi to za Ciebie. –

0

Można napisać natywną aplikację, która będzie sprawdzać dostępność .Net. Następnie musisz załadować zarządzaną bibliotekę dll za pomocą LoadLibrary i wywołać w niej funkcję (GetProcAddress), która uruchomi twoją aplikację .Net.

Domyślam się, że będziesz musiał również zadzwonić z biblioteką .Net, aby główna funkcja była widoczna i możliwa do wywołania z niezarządzanego kodu. Nazywa się to odwrotnym Pwinięciem.

http://www.autohotkey.com/forum/topic20273.html

0

Co można zrobić, to pisanie kodu .NET wykrywania w macierzystym Win32 C/C++, to nie wykrywanie, wyświetla komunikat o błędzie jakąś przyjazną użytkownika lub cokolwiek masz na myśli przez spadające lub wdzięcznie nazywa .NET dll, jeśli dostępne są odpowiednie ramy. Jeśli nie chcesz mieć dwóch plików wykonywalnych, po prostu przechowuj bajty biblioteki dll w natywnym pliku wykonywalnym i ładuj go dynamicznie.

Należy pamiętać, że takie podejście uniemożliwia uruchomienie aplikacji z Mono.

+0

Dlaczego uniemożliwiłoby uruchomienie aplikacji z Mono? Nie mógł napisać natywnych programów ładujących kod dla innych platform i Mono? –

+0

Ah, dobrze, że mógłbym zgadywać ... –

Powiązane problemy