Laden...

Prüfen, ob Framework vorhanden

Erstellt von pmSyS vor 17 Jahren Letzter Beitrag vor 17 Jahren 11.121 Views
P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 17 Jahren
Prüfen, ob Framework vorhanden

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

49.485 Beiträge seit 2005
vor 17 Jahren

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

6.862 Beiträge seit 2003
vor 17 Jahren

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.

P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 17 Jahren

🙂
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 🙁

S
8.746 Beiträge seit 2005
vor 17 Jahren

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.

128 Beiträge seit 2004
vor 17 Jahren

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

49.485 Beiträge seit 2005
vor 17 Jahren

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

128 Beiträge seit 2004
vor 17 Jahren

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

49.485 Beiträge seit 2005
vor 17 Jahren

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

128 Beiträge seit 2004
vor 17 Jahren

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

4.207 Beiträge seit 2003
vor 17 Jahren

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

www.goloroden.de
www.des-eisbaeren-blog.de

128 Beiträge seit 2004
vor 17 Jahren

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

4.207 Beiträge seit 2003
vor 17 Jahren

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

www.goloroden.de
www.des-eisbaeren-blog.de

P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 17 Jahren

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