2012-10-11 109 views

回答

17

您不应该检查确切的版本号。这将在未来发生变化(如4.0> 4.5)。请使用deployment guide中的代码。

除此之外,你应该尝试处理从.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

很好的答案!我会耻辱地删除我的黑客答案!在1641代码中编辑检查重新启动(您的原始版本编译没有错误) – fiat

+1

感谢这正是我所需要的。为我节省了一堆时间! –

+1

我一直在尝试使用不同的代码片段,但您的代码是迄今为止我所见过的最优雅和可读的解决方案。 +1 –