[C#] .NET Framework überprüffen

El Micha

Stammgast
Hallo zusammen
Ich habe vor kurzem ein Programm auf .NET Framework basierend entwickelt, nun möchte ich eine Konsolenanwendung hinzufügen, die nach der installation überprüft ob .NET Framework 2.0 oder höher installiert ist, fals dies nicht der Fall ist, soll die Konsolenanwendung den User darauf hinweisen und die aktuelle Version (3.5 SP1) herunterladen und ausführen.
Ich hoffe ihr könnt mir helfen

Grüsse
El Micha
 
Zuletzt bearbeitet:

Telaran

Stammgast
Naja, der Ansatz ist nicht das wahre.
Korrekterweise müsste dein Programm eine Installation haben und während der Installation würde es nach dem .NET Framework prüfen (das wäre definitiv die saubere und bessere Lösung).

Als Beispiel wie das mit "NSIS" aussehen könnte (ohne direkten Download, aber das wäre sicher im Netz auch auffindbar)

Code:
Function AbortIfBadFramework

  ;Save the variables in case something else is using them
  Push $0
  Push $1
  Push $2
  Push $3
  Push $4
  Push $R1
  Push $R2
  Push $R3
  Push $R4
  Push $R5
  Push $R6
  Push $R7
  Push $R8

  StrCpy $R5 "0"
  StrCpy $R6 "0"
  StrCpy $R7 "0"
  StrCpy $R8 "0.0.0"
  StrCpy $0 0

  loop:

  ;Get each sub key under "SOFTWARE\Microsoft\NET Framework Setup\NDP"
  EnumRegKey $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP" $0
  StrCmp $1 "" done ;jump to end if no more registry keys
  IntOp $0 $0 + 1
  StrCpy $2 $1 1 ;Cut off the first character
  StrCpy $3 $1 "" 1 ;Remainder of string

  ;Loop if first character is not a 'v'
  StrCmpS $2 "v" start_parse loop

  ;Parse the string
  start_parse:
  StrCpy $R1 ""
  StrCpy $R2 ""
  StrCpy $R3 ""
  StrCpy $R4 $3

  StrCpy $4 1

  parse:
  StrCmp $3 "" parse_done ;If string is empty, we are finished
  StrCpy $2 $3 1 ;Cut off the first character
  StrCpy $3 $3 "" 1 ;Remainder of string
  StrCmp $2 "." is_dot not_dot ;Move to next part if it's a dot

  is_dot:
  IntOp $4 $4 + 1 ; Move to the next section
  goto parse ;Carry on parsing

  not_dot:
  IntCmp $4 1 major_ver
  IntCmp $4 2 minor_ver
  IntCmp $4 3 build_ver
  IntCmp $4 4 parse_done

  major_ver:
  StrCpy $R1 $R1$2
  goto parse ;Carry on parsing

  minor_ver:
  StrCpy $R2 $R2$2
  goto parse ;Carry on parsing

  build_ver:
  StrCpy $R3 $R3$2
  goto parse ;Carry on parsing

  parse_done:

  IntCmp $R1 $R5 this_major_same loop this_major_more
  this_major_more:
  StrCpy $R5 $R1
  StrCpy $R6 $R2
  StrCpy $R7 $R3
  StrCpy $R8 $R4

  goto loop

  this_major_same:
  IntCmp $R2 $R6 this_minor_same loop this_minor_more
  this_minor_more:
  StrCpy $R6 $R2
  StrCpy $R7 R3
  StrCpy $R8 $R4
  goto loop

  this_minor_same:
  IntCmp R3 $R7 loop loop this_build_more
  this_build_more:
  StrCpy $R7 $R3
  StrCpy $R8 $R4
  goto loop

  done:

  ;Have we got the framework we need?
  IntCmp $R5 ${MIN_FRA_MAJOR} max_major_same fail end
  max_major_same:
  IntCmp $R6 ${MIN_FRA_MINOR} max_minor_same fail end
  max_minor_same:
  IntCmp $R7 ${MIN_FRA_BUILD} end fail end

  fail:
  StrCmp $R8 "0.0.0" no_framework
  goto wrong_framework

  no_framework:
  MessageBox MB_OK|MB_ICONSTOP "Installation failed.$\n$\n\
         This software requires Windows Framework version \
         ${MIN_FRA_MAJOR}.${MIN_FRA_MINOR}.${MIN_FRA_BUILD} or higher.$\n$\n\
         No version of Windows Framework is installed.$\n$\n\
         Please update your computer at http://windowsupdate.microsoft.com/."
  abort

  wrong_framework:
  MessageBox MB_OK|MB_ICONSTOP "Installation failed!$\n$\n\
         This software requires Windows Framework version \
         ${MIN_FRA_MAJOR}.${MIN_FRA_MINOR}.${MIN_FRA_BUILD} or higher.$\n$\n\
         The highest version on this computer is $R8.$\n$\n\
         Please update your computer at http://windowsupdate.microsoft.com/."
  abort

  end:

  ;Pop the variables we pushed earlier
  Pop $R8
  Pop $R7
  Pop $R6
  Pop $R5
  Pop $R4
  Pop $R3
  Pop $R2
  Pop $R1
  Pop $4
  Pop $3
  Pop $2
  Pop $1
  Pop $0

FunctionEnd

Alternativ müsste meines wissens, auch im Visual Studio ein Installationsgenerator existieren (bin aber nicht sicher, ob dies auf Standard/Pro beschränkt ist, oder auch im Express gibt).

Ich weiss es wirkt doof, wegen 2-3 Dateien (Exe, DLL, evtl Config) eine Installationsroutine zu machen... aber das andere würde mich als "unbeholfenen Benutzer" noch mehr abschrecken ;)
 

Feschi

Mitglied
Alternativ müsste meines wissens, auch im Visual Studio ein Installationsgenerator existieren (bin aber nicht sicher, ob dies auf Standard/Pro beschränkt ist, oder auch im Express gibt).

Allerdings gibt es das. Wenn man auf "Erstellen" -> "Veröffentlichen" geht, kann man das Projekt veröffentlichen und es wird ein Installer erstellt. Das ganze kann man unter "Projekt" -> "PROJEKTNAME - Eigenschaften" -> "Veröffentlichen" konfigurieren. Unter "Erforderliche Komponenten" kann man z.B. einstellen, dass das .NET Framework 3.5 SP1 heruntergeladen wird. Ich habe die Microsoft Visual C# 2008 Express Edition, je nachdem, welche du hast, kann es vllt. anders sein.

grüsse Feschi
 
Oben