2012-10-11 17 views

Odpowiedz

17

Nie powinieneś sprawdzać dokładnego numeru wersji. To się zmieni w przyszłości (tak jak w przypadku 4,0> 4,5). Zamiast tego użyj kodów z deployment guide.

Oprócz tego należy spróbować obsługiwać ponowne uruchomienie z .Net 4.5.

Function CheckAndInstallDotNet 
    ; Magic numbers from http://msdn.microsoft.com/en-us/library/ee942965.aspx 
    ClearErrors 
    ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Release" 

    IfErrors NotDetected 

    ${If} $0 >= 378389 

     DetailPrint "Microsoft .NET Framework 4.5 is installed ($0)" 
    ${Else} 
    NotDetected: 
     DetailPrint "Installing Microsoft .NET Framework 4.5" 
     SetDetailsPrint listonly 
     ExecWait '"$INSTDIR\Tools\dotNetFx45_Full_setup.exe" /passive /norestart' $0 
     ${If} $0 == 3010 
     ${OrIf} $0 == 1641 
      DetailPrint "Microsoft .NET Framework 4.5 installer requested reboot" 
      SetRebootFlag true 
     ${EndIf} 
     SetDetailsPrint lastused 
     DetailPrint "Microsoft .NET Framework 4.5 installer returned $0" 
    ${EndIf} 

FunctionEnd 
+3

świetna odpowiedź! Usuwam moją odpowiedź na włamanie ze wstydem! Edytowane również w kodzie 1641 sprawdzanie ponownego uruchomienia (oryginalna wersja została skompilowana bez błędu). – fiat

+1

Dzięki temu jest dokładnie to, czego potrzebowałem. Uratował mi mnóstwo czasu! –

+1

Próbowałem różnych fragmentów, ale twój jest zdecydowanie najbardziej eleganckim i czytelnym rozwiązaniem, jakie widziałem. +1 –