Entwickler-Ecke
Sonstiges (.NET) - .NET Common Language Runtime (CLR) Version ermitteln ?!
Soc - Fr 20.11.09 18:30
Titel: .NET Common Language Runtime (CLR) Version ermitteln ?!
Hallo Zusammen,
ich habe eine Anwendung unter .NET 3.5 entwickelt (VS 2008) und sie zu einen Tester weiter gegeben.
Dieser hat XP (ohne die neuste CLR Version) und das Programm bricht ab.
Nun habe ich eine Möglichkeit gesucht die "richtige" CLR Version zu ermitteln.
Dieses habe ich wie folgt gemacht (Tip aus MSDN):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| object _runtimeOK = gm.RegReadValue(GlobVar.RegistryRootKeys.HKEY_LOCAL_MACHINE, @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5", "Install", false); if (!Convert.ToBoolean(_runtimeOK)) { string _xmsg = _S + _M + "89 - Das Programm benötigt die .NET Runtime Version 3.5 oder höher.\n\r "; _xmsg += "Bitte installieren Sie eine neuere Version, welche Sie von der Microsoft Homepage unter\n\r\n\r"; _xmsg += "http://www.microsoft.com/netframework \n\r\n\rrunter laden können."; MessageBox.Show(_xmsg, GlobVar.formTitle + " Programm " + GlobVar.assemblyName + " kann nicht ausgeführt werden.", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(8); } |
Es kommt zwar von MS, aber trotzdem bin ich mir nicht so sicher ob es auch so zukünftig o.k. ist.
Hat jemand eine andere Lösung ?
Gruss
Soc
Soc - Mi 25.11.09 11:07
Hallo Zusammen,
das oben genannte Beispiel scheint doch noch nicht so ganz zu funktionieren.
Ein Bekannter hat zwar 3.5 nachinstalliert, aber trotzdem erscheint die Version 2.0.50727.
3053 anstatt die erforderliche Version 2.0.50727.
3603.
Ich habe eine Möglichkeit gefunden wie man über die .Config die erforderliche CLR eintragen kann.
C#-Quelltext
1: 2: 3: 4: 5:
| <configuration> <startup> <requiredRuntime version="v2.0.50727" safemode="true"/> </startup> </configuration> |
Diese Möglichkeit scheitert aber daran, dass die Revision nicht anzugeben ist.
Hat jemand eine Idee, wie man
a) sicher stellen kann das meine Anwendung auch beim Benutzer funktioniert (ein VS Setup Projekt (welches ja die Vorbedingungen abcheckt möchte ich nicht erstellen) ?
b) in meiner assembly festlegen kann das der build für eine spezielle (kleinere) CLR Version gemacht werden soll ?
Gruss
Soc
danielf - Mi 25.11.09 13:34
Hallo,
du kannst in deiner VS-Solution für jedes Projekt/Assembly festlegen für welche CLR-Version er es kompilieren soll. Kannst aber dann halt keine neuen Features mehr verwenden.
Rechtsklick auf Projekt - Eigenschaften - Anwendung - Zielframework.
Aber ich würde ein Setup machen :D
Gruß Daniel
Soc - So 29.11.09 15:10
danielf hat folgendes geschrieben : |
Hallo,
Rechtsklick auf Projekt - Eigenschaften - Anwendung - Zielframework.
Aber ich würde ein Setup machen :D
|
Hallo Daniel,
Leider verwende ich 3.5 Features und kann somit nicht auf 3.0 oder sogar 2.0 kompilieren.
Nun habe ich aber die Schwierigkeit festzustellen ob der Benutzer auch wirklich 3.5 installiert hat.
Allebisherigen Abfragen (inkl. der von MS) gingen bisher in die H...
Gruß
Soc
Kha - So 29.11.09 18:59
Soc hat folgendes geschrieben : |
| Ein Bekannter hat zwar 3.5 nachinstalliert, aber trotzdem erscheint die Version 2.0.50727.3053 anstatt die erforderliche Version 2.0.50727.3603. |
Und dein Programm läuft auf .3053 wirklich nicht :gruebel: ?
Ansonsten mach es eben so: Wenn 3.5 nicht installiert ist, wird wohl irgendwo eine DllNotFoundException geworfen. die kannst du in der aufrufenden Methode abfangen und die Meldung anzeigen.
Ralf Jansen - So 29.11.09 19:57
| Zitat: |
| Ein Bekannter hat zwar 3.5 nachinstalliert, aber trotzdem erscheint die Version 2.0.50727.3053 anstatt die erforderliche Version 2.0.50727.3603. |
2.0.50727.3603 ist .NET 3.5
SP1 oder auch nur .NET 2.0
SP2.
Du könntest versuchen die File Version der mscorlib auszulesen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| FileVersionInfo fileVersion = FileVersionInfo.GetVersionInfo(typeof(System.Exception).Assembly.Location);
if ((fileVersion.ProductMajorPart == 2) && (fileVersion.ProductMinorPart == 0) && (fileVersion.ProductBuildPart == 50727) && (fileVersion.ProductPrivatePart >= 3603)) { } |
Wenn du noch 2.0 SP2 von 3.5 SP1 unterscheiden willst müßtest du versuchen eine Assembly die es erst nach dem 2.0er Framework gab zu laden.
Kha - So 29.11.09 20:03
Ralf Jansen hat folgendes geschrieben : |
| 2.0.50727.3603 ist .NET 3.5 SP1 oder auch nur .NET 2.0 SP2. |
Ebenso wie .3053
http://msdn.microsoft.com/en-us/kb/kb00318785.aspx
Ralf Jansen hat folgendes geschrieben : |
| Du könntest versuchen die File Version der mscorlib auszulesen. |
Dürfte übrigens das gleiche Ergebnis wie
System.Environment.Version liefern. Keine Ahnung, warum ich jetzt erst auf diese Property komme :D .
Ralf Jansen - So 29.11.09 20:20
OK.
@Soc: In dem Fall würde mich interessieren welche Funktion dir Probleme macht und du explizit den 3603 build brauchst.
Soc - Mo 30.11.09 10:27
Ralf Jansen hat folgendes geschrieben : |
OK.
@Soc: In dem Fall würde mich interessieren welche Funktion dir Probleme macht und du explizit den 3603 build brauchst. |
Danke erstmal allen für die Hilfe.
Als ich versucht habe mit 3.0 den Build anzustossen, kam die Meldung das der LINQ nicht unterstützt sei.
Habe es aber nicht weiter nachgeschaut was genau.
Gruß
Soc
Kha - Mo 30.11.09 19:37
Soc hat folgendes geschrieben : |
| Als ich versucht habe mit 3.0 den Build anzustossen, kam die Meldung das der LINQ nicht unterstützt sei. |
Vorher ging es noch um einen Bekannten mit 3.
5 :nixweiss: ?
Ich denke schon, dass die Registry-Methode wasserdicht ist - vor allem sind dort auch SPs vermerkt.
Soc - Di 01.12.09 09:12
Kha hat folgendes geschrieben : |
Soc hat folgendes geschrieben : | | Als ich versucht habe mit 3.0 den Build anzustossen, kam die Meldung das der LINQ nicht unterstützt sei. | Vorher ging es noch um einen Bekannten mit 3.5 :nixweiss: ?
Ich denke schon, dass die Registry-Methode wasserdicht ist - vor allem sind dort auch SPs vermerkt. |
Das war auch so.
Er hat 3.5 SP1 installiert und trotzdem ergab die Versionsabfrage via Environment.version immer noch eine "ältere" Version, obwohl der Registry Key (so wie von MS beschrieben) da war.
Kann natürlich sein das bei der Installation bei ihm was krumm gelaufen ist.
Aus diesem Grund war ich mir sicher das der vorgeschlagene MS Weg auch nicht "wasserdicht" ist.
Gruß
Soc
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!