Get .NET Version: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
 
No edit summary
Line 57: Line 57:
Section
Section
SectionEnd</highlight-nsis>
SectionEnd</highlight-nsis>
[[Category:Other Products Version Detection Functions]]
[[Category:Other Products Version Detection Functions]

Revision as of 03:23, 12 December 2005

Author: kichik (talk, contrib)


This function retrieves the latest version of the .NET runtime library installed on the user's computer. It can also be used to detect .NET, as it will return no version where the .NET runtime library is not installed.

Unlike other functions available, this one doesn't rely on the registry. It uses the API provided by Microsoft. APIs are much more reliable and backward compatible than the registry. In this case, it's also much easier to use. There's no need to enumerate any registry key, looking for the latest version. It uses GetCORVersion to retrieve the latest installed version of .NET runtime library.

The Function

Function GetDotNETVersion
  Push $0
  Push $1
 
  System::Call "mscoree::GetCORVersion(w .r0, i ${NSIS_MAX_STRLEN}, *i) i .r1"
  StrCmp $1 0 +2
    StrCpy $0 "not found"
 
  Pop $1
  Exch $0
FunctionEnd

Usage Example

This example uses VersionCompare to make sure the user has at least version 1.1 installed.

# comment the next two lines for NSIS version < 2.08
!include WordFunc.nsh
!insertmacro VersionCompare
 
!include LogicLib.nsh
 
Name ".NET Product"
OutFile "ProductInstaller.exe"
 
Function .onInit
  Call GetDotNETVersion
  Pop $0
  ${If} $0 == "not found"
    MessageBox MB_OK|MB_ICONSTOP ".NET runtime library is not installed."
    Abort
  ${EndIf}
 
  StrCpy $0 $0 "" 1 # skip "v"
 
  ${VersionCompare} $0 "1.1" $1
  ${If} $1 == 2
    MessageBox MB_OK|MB_ICONSTOP ".NET runtime library v1.1 or newer is required. You have $0."
    Abort
  ${EndIf}
FunctionEnd
 
Function GetDotNETVersion
  Push $0
  Push $1
 
  System::Call "mscoree::GetCORVersion(w .r0, i ${NSIS_MAX_STRLEN}, *i) i .r1"
  StrCmp $1 "error" 0 +2
    StrCpy $0 "not found"
 
  Pop $1
  Exch $0
FunctionEnd
 
Section
SectionEnd

[[Category:Other Products Version Detection Functions]