Autor Beitrag
Soc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Fr 20.11.09 18:30 
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):

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: So 29.11.09 15:10 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 29.11.09 18:59 
user profile iconSoc hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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)) // aktuell wäre mittlerweile 4200 durch Security KBs
{
     // wir haben zumindest 2.0 SP2 oder 3.5 SP1 
}


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 29.11.09 20:03 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
2.0.50727.3603 ist .NET 3.5 SP1 oder auch nur .NET 2.0 SP2.
Ebenso wie .3053
msdn.microsoft.com/e...s/kb/kb00318785.aspx
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 29.11.09 20:20 
Zitat:
user profile iconKha"(586200)]
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
2.0.50727.3603 ist .NET 3.5 SP1 oder auch nur .NET 2.0 SP2.
Ebenso wie .3053
msdn.microsoft.com/e...s/kb/kb00318785.aspx


OK.
@Soc: In dem Fall würde mich interessieren welche Funktion dir Probleme macht und du explizit den 3603 build brauchst.
Soc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Mo 30.11.09 10:27 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
user profile iconKha"(586200)]
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
2.0.50727.3603 ist .NET 3.5 SP1 oder auch nur .NET 2.0 SP2.
Ebenso wie .3053
msdn.microsoft.com/e...s/kb/kb00318785.aspx


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 30.11.09 19:37 
user profile iconSoc hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Di 01.12.09 09:12 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconSoc hat folgendes geschrieben Zum zitierten Posting springen:
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