Wie schlägt man fehl, wenn .NET nicht installiert ist?

9

Ich habe kürzlich gefragt wenn Sie von der Anwendung erkennen können, ob .NET installiert ist (damit die Anwendung nicht mit einem allgemeinen Ausnahmefehler abstürzt).

Die Antwort scheint ein einfaches "Nein" zu sein. Ich möchte immer noch in der Lage sein, elegant zu beenden, wenn .NET nicht installiert ist, gibt es eine Möglichkeit, dies zu tun?

Denken Sie daran, dass ich den Namen der ausführbaren Datei nicht ändern möchte. Das heißt, es ist in Ordnung, eine nicht verwaltete ausführbare Datei zu verwenden, die das eigentliche .NET-Programm ausführt, aber keine ausführbaren Dateien benötigt.

Bearbeiten: Ich meine nicht, dass ich vom Installer scheitern muss, es gibt überhaupt kein Installationsprogramm, nur die ausführbare Datei. Natürlich ist es sehr unwahrscheinlich, dass dies passiert, aber trotzdem möchte ich es trotzdem überprüfen können.

    
Jorge Córdoba 27.02.2009, 10:54
quelle

4 Antworten

3

Sie haben zwei verschiedene Optionen:

  • Schreiben Sie einen kleinen nativen Code-Loader, der nach der Laufzeit sucht und Ihre Software ausführt, wenn die Laufzeitumgebung installiert ist. Andernfalls könnte der Benutzer lediglich eine Fehlermeldung erhalten, ihn auf den Download-Speicherort für die Laufzeit usw. verweisen.

ODER

  • Stellen Sie sicher, dass Ihr Installationsprogramm die Laufzeitumgebung installiert. Joe Coehorn erwähnte, dass es mit MSI in diesem Post leicht gemacht werden würde Sie sollten es auch mit anderen Installationsprogrammen wie InnoSetup machen können. Natürlich, wenn jemand Ihre Software zum ersten Mal installiert, dann Windows neu installiert und dann versucht, Ihre Anwendung auszuführen, ohne sie erneut zu installieren, stürzt sie ab.

Und natürlich könnten Sie beide für das Beste aus beiden Welten kombinieren.

    
Adrian Grigore 27.02.2009, 11:01
quelle
0

Sie könnten eine native Anwendung schreiben, die auf .NET-Existenz prüft. Dann müssen Sie die verwaltete DLL mit LoadLibrary laden und eine Funktion darin aufrufen (GetProcAddress), die Ihre .Net-Anwendung startet.

Ich denke, Sie müssen sich auch mit der .NET-DLL herumschlagen, um Ihre Hauptfunktion aus nicht verwaltetem Code sichtbar und aufrufbar zu machen. Es wird als inverse PInvoke bezeichnet.

Ссылка

    
Alex Reitbort 27.02.2009 11:01
quelle
0

Was Sie tun können, ist das Schreiben Ihres .NET-Erkennungscodes in natives Win32 C / C ++, es macht die Erkennung, zeigt einige benutzerfreundliche Fehlermeldung oder was auch immer Sie meinen, fallend oder ruft die .NET-DLL auf, wenn es ein entsprechendes gibt Framework verfügbar. Wenn Sie nicht zwei ausführbare Dateien haben möchten, speichern Sie einfach die Bytes der DLL in Ihrer nativen ausführbaren Datei und laden Sie sie dynamisch.

Beachten Sie, dass diese Vorgehensweise es völlig unmöglich macht, Ihre Anwendung mit Mono auszuführen.

    
Tamas Czinege 27.02.2009 11:02
quelle
-2

Stellen Sie einfach eine nette Nachricht Box, dass es nicht installiert ist und bieten an, es herunterzuladen. Die meisten Installateure erlauben Ihnen, dies trotzdem zu tun.

    
Gary Willoughby 27.02.2009 10:57
quelle

Tags und Links