[.Net + WinAPI] eigener .Net Preloader



  • Hallo,

    folgendes ist mir mal in den Sinn gekommen:

    Wenn man ein .Net-Framework-Programm an einem Rechner ohne .Net startet,
    erscheint normalerweise eine für Laien krypische Fehlermeldung:
    "mscoree.dll konnte nicht gefunden werden"
    und das Programm ist abrupt beendet.

    Kann man einen Winapi / MFC - "Preloader" hinzufügen,
    sodass man bei fehlemdem .Net-Framework einen
    "netten" bzw. benutzerfreundlichen Hinweis bekommt,
    dass man dieses oder jenes noch installieren müsse?
    Wenn ja wie?

    Ich hoffe ihr versteht was ich meine 🙄



  • Rhombicosidodecahedron schrieb:

    Ich hoffe ihr steht was ich meine 🙄

    Ich stehe das schon 😃
    Kann aber auch nicht helfen.
    Ich glaube Du musst die Exception abfangen, bevor die Form aufgerufen wird.
    Also in der Projekt.cpp...

    int main(array<System::String ^> ^args)
    {
    	try
    	{
    		// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    		Application::EnableVisualStyles();
    		Application::SetCompatibleTextRenderingDefault(false); 
    
    		// Hauptfenster erstellen und ausführen
    		Application::Run(gcnew Form1());
    		return 0;
    	}
    
    	catch(ExecutionEngineException^ ex)
    	{
    		MessageBox::Show(ex->Message);
    	}
    

    Nur das testen wird schwierig, weil Du das immer auf die Kiste ohne .NET packen musst.

    Gruß

    Franz



  • I love C++ schrieb:

    Rhombicosidodecahedron schrieb:

    Ich hoffe ihr steht was ich meine 🙄

    Danke, korrigiert

    I love C++ schrieb:

    Nur das testen wird schwierig, weil Du das immer auf die Kiste ohne .NET packen musst.

    Kein Problem dazu gibt es VMs.

    Jedoch klappt es nicht, da main doch nur ausgeführt wird wenn ein .Net Framework installiert ist (wegen CLI-Header und so), oder sehe ich das falsch? (Alleine durch das [STAThreadAttribute] oder MessageBox::Show(ex->Message) )



  • Rhombicosidodecahedron schrieb:

    Hallo,

    erscheint normalerweise eine für Laien krypische Fehlermeldung:
    "mscoree.dll konnte nicht gefunden werden"
    und das Programm ist abrupt beendet.

    hmm so eine meldung kommt beim mir gar nicht.



  • Es sieht für mich so aus, als wolltet ihr abfangen ob die CLR euer Assembly laden kann oder nicht (weil sie z.B. nicht vorhanden ist). Das könnte man lösen, indem man einen eigenen CLR Host schreibt.

    Ich denke aber dass das komplett sinnlos ist.

    Simon



  • neoexpert schrieb:

    Rhombicosidodecahedron schrieb:

    Hallo,

    erscheint normalerweise eine für Laien krypische Fehlermeldung:
    "mscoree.dll konnte nicht gefunden werden"
    und das Programm ist abrupt beendet.

    hmm so eine meldung kommt beim mir gar nicht.

    bei mir auch nicht - hab um ehrlich zu sein diese fehlermeldung noch nie gehoert

    normalerweise kommt sowas wie "die anwendungskonfiguration ist falsch, eine neuinstallation koennte das problem beheben" - zumindest hab ich noch nie eine meldung gesehen die eine dll beim namen nannte - noch nichtmal eine die man auf das .net beziehen kann



  • Rhombicosidodecahedron schrieb:

    Ich hoffe ihr versteht was ich meine 🙄

    Und ob 😃
    das erinnert mich daran, dass heute noch in Jahre 2009 die DLL's und EXE's folgende Zeile beinhalten: "This program cannot be run in DOS mode."
    D.h. damals schon wurde an einen Mechanismus gedacht, der es DOS ermoeglicht diese Meldung auszugeben wenn eine Windows-Exe gestartet wurde. Da stuerzt nichts ab, da kommt keine kryptische Fehlermeldung, sondern der sanfte Hinweis, dass das Proggie eben nicht im DOS Modus laeuft.

    Was Du suchst bzgl. Dotnet-Exe-Assemblies suche ich auch schon eine lange Zeit, und vergebens. 😞
    Eine lesbare Meldung, dass zur erfolgreichen Ausfuehrung der gestarteten Exe-Datei ein Dotnet Framework benoetigt wird, und kein Absturz a la "mscore.dll nicht gefunden" etc. -> da heisst es dann naemlich gleich "was ist denn das fuer ein schei* Programm, das stuerzt ja gleich beim Start ab" 🤡

    Wieso wurde da eigentlich Exe/DLL beibehalten und keine andere Endungen erdacht fuer Dotnet-Assemblies, um die es sich ja hier handelt? Dann waere das Problem erledigt. Wir werden es nie erfahren, und noch immer gibt es keine Loesung fuer Dein Problem, ich haette auch gerne eine. 😕


Anmelden zum Antworten