添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
冷冷的春卷  ·  AudioTimestamp.FramePo ...·  2 月前    · 
不要命的野马  ·  openpyxl ...·  10 月前    · 
热心肠的冲锋衣  ·  ERROR sqoop.Sqoop: ...·  11 月前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I'm after some code snippets for NSIS to detect and conditionally run the .NET 4.5 installer

This answer - NSIS Installer with .NET 4.0 - is too naive as checking only the presense of the registry key (not the value) will not discriminate between 4.0 and 4.5

You shouldn't check for an exact version number. This will change in the future (as was the case for 4.0 > 4.5). Instead use the codes from the deployment guide .

In addition to that you should try to handle the reboot from .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
                great answer! I will delete my hack answer in shame! Also edited in the 1641 code check for reboot (your original version compiled without error)
– fiat
                Oct 19, 2012 at 2:45
                I've been trying different snippets for this but yours is by far the most elegant and readable solution I've seen. +1
– Axel Magagnini
                Jan 14, 2014 at 4:56
                what if they just have .net5 or another future major version of .net installed? will this method still work? presumably the next major versions will be backwards compatible so the user wouldn't need to install 4.5 if 5,6 or whatever is installed?
– matt
                Jul 22, 2014 at 23:38
                Consider this registry key public surface area.  .Net guarantees that it will be present for all future versions that will run .Net 4.x apps.
– TheESJ
                Jul 24, 2014 at 18:36
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.