Moin Leute,
ich hab schon ein wenig in der Forumssuche geschnüffelt, aber nichts gefunden, das mir die folgende Frage beantwortet:
Ist es möglich, in einer .Net Anwendung zu prüfen, ob das Framework vorhanden ist?
Ist das nicht vorhanden, dann verabschiedet sich das Programm mit einer Fehlermeldung, die kein normalsterblicher versteht. (Ich sprech aus Erfahrung)
Ist es möglich zu prüfen, ob alles Benötigte vorhanden ist, bevor die Anwendung richtig startet und somit dann diese Typische Fehlermeldung ausgibt?
Ich wollte dabei nicht umbedingt einen Installer verwenden, der die Arbeit machen würde...
Gruß
pmSyS
Hallo pmSyS,
da .NET-Anwendungen ohne das Framework nicht ausgeführt werden können, kann man mit einer .NET-Anwendung nicht abprüfen, ob das Framework installiert ist.
herbivore
Nein, ein .Net Programm kann nunmal nicht starten wenn kein Framework installiert ist, auch kein bisschen um ne Fehlermeldung zu zeigen, geht genauso wenig wie ein bisschen schwanger sein 😉
Wenn du keinen Installer verwenden möchtest, dürfte es das einfachste sein, nen kleines unmanaged Programm als Loader für dein .Net Programm zu schreiben, welches dir beim Start prüft obs Framework vorhanden ist, falls ja dann wird das eigentliche .Net Programm gestartet, falls nein wird halt ne Meldung ausgegeben.
Baka wa shinanakya naoranai.
Mein XING Profil.
🙂
Hab ich mir schon gedacht...
Das mit dem Loader ist nicht schlecht, aber ich werd dann doch einen Installer verwenden.
Kann man das irgendwie mit dem VS-Installer bewerkstelligen?
Hab mit diesem noch nicht gearbeitet. Oder gibt es irgendwo ein brauchbares Tutorial?
In dem Unternehmen hier darf ich offiziell nur den des VS verwenden 🙁
Unter 2003 ist ein bißchen Handrbeit (Registryeintrag abfragen und vergleichen) nötig um das Framework (und MDAC) zu installieren. Unter 2005 geht das glaub ich automatisch.
Hallo,
Original von pmSyS
Das mit dem Loader ist nicht schlecht, aber ich werd dann doch einen Installer verwenden.Kann man das irgendwie mit dem VS-Installer bewerkstelligen?
Hab mit diesem noch nicht gearbeitet. Oder gibt es irgendwo ein brauchbares Tutorial?
In dem Unternehmen hier darf ich offiziell nur den des VS verwenden 😦
So, als Tipp: Du kannst die Verzeichnisse unterhalb von C:\WINDOWS\Microsoft.NET\Framework abfragen, da findest du dann je nach Version die entsprechenden Unterordner:
v1.0.3705
v1.1.4322
v2.0.50727
Alternativ geht es auch über die Registry (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework).
Bis denne, JoKi
Bis denne, JoKi
Enjoy AFP FAQ - Participate AfpWiki - Get Blogged by JoKi - Talk to me at VFP User Group Meeting
Hallo JoKi,
die Verzeichnisse sind aber teilweise auch nach der Deinstallation noch vorhanden. Also kein sicheres Zeichen, dass die entsprechende Version auch vorhanden/nutzbar ist.
herbivore
Hallo herbivore,
Original von herbivore
die Verzeichnisse sind aber teilweise auch nach der Deinstallation noch vorhanden. Also kein sicheres Zeichen, dass die entsprechende Version auch vorhanden/nutzbar ist.
Hm, das ist schade. Was wäre dann sozusagen eine sichere Methode? Mit einem vorhanden gacutil den GAC analysieren und ermitteln, ob die notwendigen Assemblies vorhanden sind?
Ich habe ehrlich keine konkrete Idee, aber auf irgendeine Art und Weise muss eine sichere Detection möglich sein. Dunno, vielleicht die Existenz bestimmter Dateien...
Wie sieht's aus, hast du weitergehende Ideen, und Erfahrungen für die Feststellung, ob eine bestimmte Version bzw. überhaupt das .NET Framework auf dem Zielrechner vorhanden ist?
Bis denne, JoKi
Bis denne, JoKi
Enjoy AFP FAQ - Participate AfpWiki - Get Blogged by JoKi - Talk to me at VFP User Group Meeting
Hallo JoKi,
eine zuverlässige Methode kenne ich leider nicht. Ich vermute, dass auch in der Registry nach der Deinstallation Leichen bleiben. Vielleicht funktioniert HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall mit ausreichender Sicherheit (also z.B. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft.NET Framework 2.0).
herbivore
Hallo herbivore,
Original von herbivore
Vielleicht funktioniert HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall mit ausreichender Sicherheit (also z.B. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft.NET Framework 2.0).
Hm, ist eine interessante Variante. Nur wird sich das zukünftig erledigen, da beispielsweise das Framework 1.1 immer bei einem Windows Server 2003 vorhanden ist und auch Vista bzw. Longhorn Server immer das Framework 2.0 haben werden. Nunja, auf diese Weise sind die Vorsetzungen implizit erfüllt - auch gut.
Danke für die Anregungen bzgl. Registry.
Bis denne, JoKi
Bis denne, JoKi
Enjoy AFP FAQ - Participate AfpWiki - Get Blogged by JoKi - Talk to me at VFP User Group Meeting
Um zu prüfen, ob irgendein Framework installiert ist, überprüfen, ob die Datei C:\Windows\System32\mscoree.dll existiert.
Um zu prüfen, welche die höchste installierte .NET-Version ist, prüft man, welche Version diese Datei hat.
Um zu prüfen, ob eine bestimmte Frameworkversion installiert ist, die Methode CorBindToRuntimeEx aus dieser DLL verwenden und versuchen, die gefragte Version der Runtime zu initialisieren. Wenn es fehlschlägt, ist sie nicht installiert.
Die mscoree.dll existiert nur einmal und regelt das Side-By-Side-Installationsverhalten des Frameworks. Damit sie mit der jeweils höchsten Version zurecht kommt, entspricht sie der höchsten installierten .NET-Version.
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Hallo Golo,
gute Info mit dem API Call in die DLL.
Davon ausgehend habe ich einen Blick in die MSDN geworfen und folgende Information gefunden:
_Available Runtime Versions
The runtime determines the available runtime versions by enumerating the keys and values in the registry under HKLM\SOFTWARE\Microsoft.NETFramework\policy. Each key identifies the major and minor version of the runtime. The values under each major and minor key identify the build number. For example, the key HKLM\SOFTWARE\Microsoft.NETFramework\policy\v1.0 with a value of 3705 indicates that version 1.0.3705 of the .NET Framework is installed.
A directory with the same version number as specified in the registry must also exist under the .NET Framework installation root. The directory names are preceded with the letter v. For example, version 1.0.3705 of the .NET Framework would be installed in <InstallRoot>\v1.0.3705._
So macht es zumindest Microsoft...
Bis denne, JoKi
Enjoy AFP FAQ - Participate AfpWiki - Get Blogged by JoKi - Talk to me at VFP User Group Meeting
Macht auch Sinn, es so rum zu machen und nicht direkt nach den Ordnern zu schauen.
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Um zu prüfen, ob irgendein Framework installiert ist, überprüfen, ob die Datei C:\Windows\System32\mscoree.dll existiert.
Stimmt, wenn das Framework nicht installiert ist, dann wird eine Fehlermeldung ausgegeben, dass diese Datei fehlt.
Vielen Dank für die Infos.
Gruß
pmSyS