2012-10-11 103 views
6

estoy después de algunos fragmentos de código para NSIS para detectar y condicionalmente ejecutar el instalador .NET 4.5NSIS Installer con .NET 4.5

Esta respuesta - NSIS Installer with .NET 4.0 - es demasiado ingenua como la comprobación sólo el presense de la clave de registro (no el valor) no discriminará entre 4.0 y 4.5

Respuesta

17

No debe verificar el número exacto de la versión. Esto cambiará en el futuro (como fue el caso para 4.0> 4.5). En su lugar, use los códigos del deployment guide.

Además de eso, debe intentar manejar el reinicio desde .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

great answer! ¡Eliminaré mi respuesta de pirateo en vergüenza! También editado en el código 1641, compruebe si reinicia (su versión original compilada sin error) – fiat

+1

Gracias, esto es exactamente lo que necesitaba. Me ahorraste un montón de tiempo! –

+1

He estado probando diferentes fragmentos para esto, pero el suyo es de lejos la solución más elegante y legible que he visto. +1 –

Cuestiones relacionadas