Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Prüfen, ob Framework vorhanden
pmSyS
myCSharp.de - Member



Dabei seit:
Beiträge: 65

Themenstarter:

Prüfen, ob Framework vorhanden

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
pmSyS
myCSharp.de - Member



Dabei seit:
Beiträge: 65

Themenstarter:

beantworten | zitieren | melden


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
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
JoKi
myCSharp.de - Member

Avatar #avatar-1587.png


Dabei seit:
Beiträge: 128
Herkunft: Mauritius

beantworten | zitieren | melden

Hallo,
Zitat
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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
JoKi
myCSharp.de - Member

Avatar #avatar-1587.png


Dabei seit:
Beiträge: 128
Herkunft: Mauritius

beantworten | zitieren | melden

Hallo herbivore,
Zitat
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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
JoKi
myCSharp.de - Member

Avatar #avatar-1587.png


Dabei seit:
Beiträge: 128
Herkunft: Mauritius

beantworten | zitieren | melden

Hallo herbivore,
Zitat
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
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4.207
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
JoKi
myCSharp.de - Member

Avatar #avatar-1587.png


Dabei seit:
Beiträge: 128
Herkunft: Mauritius

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4.207
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
pmSyS
myCSharp.de - Member



Dabei seit:
Beiträge: 65

Themenstarter:

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers