Überprüfen die .NET anwendungen beim start ob .NET vorhanden ist?



  • Hallo! Ich habe eine allgemeine Frage zu .NET . Eine .NET anwendung braucht ja .NET framework. Überprüfen die .NET anwendungen beim start ob .NET vorhanden ist? Oder wie läuft das?



  • Eine .NET Anwendung versucht beim Starten die .NET Runtime zu laden, sowie einen Haufen benötigte Assemblies.
    Wenn das .NET Framework nicht da ist, dann wird das nicht hinhauen.



  • hustbaer schrieb:

    Eine .NET Anwendung versucht beim Starten die .NET Runtime zu laden

    Wie Läuft das denn?
    Muss eine bestimmte DLL vorhanden sein? Meine Anwendung bricht mit folgender meldung ab: Die Anwendung konnte nicht richtig initialisiert werden (0xc0000135).



  • Warum musst Du das noch genauer wissen?



  • neoexpert schrieb:

    hustbaer schrieb:

    Eine .NET Anwendung versucht beim Starten die .NET Runtime zu laden

    Wie Läuft das denn?

    Keine Ahnung, guck ob du im Netz Informationen dazu findest.

    Muss eine bestimmte DLL vorhanden sein? Meine Anwendung bricht mit folgender meldung ab: Die Anwendung konnte nicht richtig initialisiert werden (0xc0000135).

    Aha.
    Und?



  • theta schrieb:

    Warum musst Du das noch genauer wissen?

    Ja wäre doch schön das zu wissen, vielleicht könnte ich an meine Anwendung nur das anhängen was sie Braucht. Oder träume ich in falsche richtung?



  • sobald du die eine dll hast fehlt die andere
    dann hangelst du dich durch und hast am ende fast alle dll dateien die beim framework eh dabei sind - also installieren lassen und feddich is



  • achjo.
    wie findet man es denn heraus welche dlls benötigt werden?



  • garnicht.
    es muss einfach das .net framework installiert sein.



  • .Net Framework sind nicht nur ein paar DLLs. Das ist eine Laufzeitumgebung mit virtueller Maschine, Garbage Collection, JIT-Compiler etc.

    Um die Eingansfrage zu beantworten: Nein, .Net Applikationen prüfen nicht ob das Framework vorhanden ist, weil solche Applikationen nur VOM Framework gestartet werden können... Anders gesagt, wenn die .NEt Applikation erstmal läuft (was der früheste Punkt ist wo eine solche Überprüfung stattfinden könnte) dann muß das Framework ja schon dagewesen sein um die Applikation zu starten....



  • loks schrieb:

    Anders gesagt, wenn die .NEt Applikation erstmal läuft (was der früheste Punkt ist wo eine solche Überprüfung stattfinden könnte) dann muß das Framework ja schon dagewesen sein um die Applikation zu starten....

    Mmh, nee, oder? 😉

    Ist eine .NET-Applikation zunächst nicht auch ein normales PE?
    Ziemlich sicher sogar. Woran sollte Windows denn sofort erkennen, dass es ein .Net Programm ist?



  • Steht wahrscheinlich in den ersten x Byte der Datei oder so



  • ⚠ Achtung, Spekulation und Halbwissen! ⚠

    So weit mir bekannt ist befindet sich am Anfang einer ausführbarten Datei für das .Net-Framework ein "unmanaged" Teil (ganz normales PE-Format), der die Laufzeitumgebung startet (VM, JIT-Compiler, etc.). Der eigentlich MSIL-Code befindet sich dann als Resource in dieser Datei.

    Aber mal ehrlich, warum sollte sich die Exe dafür interessieren ob das .Net-Framework installiert ist oder nicht? Wenn es nicht installiert ist crasht das Programm einfach, wenn doch, auch gut.



  • O.o schrieb:

    Wenn es nicht installiert ist crasht das Programm einfach, wenn doch, auch gut.

    Nö, muss es dann eben nicht.
    Ich hab das nämlich auch so wie du in Erinnerung, dass erst ein "unmanaged" Teil kommt und dieser durchaus in der Lage ist eine Meldung ".NET x.y required" auszugeben.



  • Jockelx schrieb:

    O.o schrieb:

    Wenn es nicht installiert ist crasht das Programm einfach, wenn doch, auch gut.

    Nö, muss es dann eben nicht.
    Ich hab das nämlich auch so wie du in Erinnerung, dass erst ein "unmanaged" Teil kommt und dieser durchaus in der Lage ist eine Meldung ".NET x.y required" auszugeben.

    Das wäre doch viel zu einfach! 😃



  • Ich hatte ein änliches Problem bzw. Ziel: http://www.c-plusplus.net/forum/viewtopic-var-t-is-244197.html.

    O.o schrieb:

    So weit mir bekannt ist befindet sich am Anfang einer ausführbarten Datei für das .Net-Framework ein "unmanaged" Teil (ganz normales PE-Format), der die Laufzeitumgebung startet (VM, JIT-Compiler, etc.). Der eigentlich MSIL-Code befindet sich dann als Resource in dieser Datei.

    Zwar nicht als Resource sondern als data directory aber sonst richtig.
    [url=http://books.google.de/books?id=50PhgS8vjhwC&pg=PA320&lpg=PA320&source=bl&ots=vYJu_kx2nQ&sig=umepZs4oECa5_Gx1Plodng3Lv4Q&hl=de&ei=x9KbSqPPEsKG_AaK9pWoBQ&sa=X&oi=book_result&ct=result&resnum=3#v=onepage&q=&f=false]The common language infrastructure annotated standard
    Von James S. Miller, Susann Ragsdale[/url]
    Laut depends.exe das solch ein Programm nur _CorExeMain von mscoree.dll auf.

    O.o schrieb:

    Aber mal ehrlich, warum sollte sich die Exe dafür interessieren ob das .Net-Framework installiert ist oder nicht? Wenn es nicht installiert ist crasht das Programm einfach, wenn doch, auch gut.

    Das sieht dann aber nicht so gut aus, wenn ein Programm crashed oder eine unverständliche Fehlermeldung abwirft.



  • Naja...
    Man könnte einen eigenen "loader" schreiben.
    Der "loader" ist dabei ein ganz normales Win32 Programm.
    Der kann erstmal (wie auch immer) checken, ob das .NET Framework installiert ist (und ggf. eine hübsche Fehlermeldung anzeigen).

    Falls das .NET Framework installiert ist, kann der "loader" dann einfach eine .NET DLL laden (mittels LoadLibrary), und eine darin definierte Funktion ausführen. Mit C++/CLI für den .NET Teil geht das recht schön.





  • spielehersteller machen das doch auch mit so nem "launcher"



  • theta schrieb:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-244197.html

    Äh.
    Ein Thread mit Fragen ohne brauchbare Antworten.
    Und?


Anmelden zum Antworten