How to Detect .NET Framework: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Updated author links.) |
m (Added category links.) |
||
Line 143: | Line 143: | ||
Exch $0 | Exch $0 | ||
FunctionEnd</highlight-nsis> | FunctionEnd</highlight-nsis> | ||
[[{{ns:14}}:Other Products Version Detection Functions]] |
Revision as of 20:44, 30 April 2005
Author: sunjammer (talk, contrib) |
How To Use
This function will return 1 (through the stack) if .NET Framework is found on the computer it is running on, or 0 if .NET Framework is not found. It first gets the install root of .NET Framework from:
"HKLM\Software\Microsoft\.NETFramework\InstallRoot"
then it enumerates the sub-keys of:
"HKLM\Software\Microsoft\.NETFramework\Policy"
and checks for each sub-key if the version it is specifying exists in the .NET Framework install root. If one of them exists it returns 1.
I would like to thank TechKid for helping out with the creation of this function.
Below is the function itself. Scroll down a bit to find a full example.
The Function
; IsDotNETInstalled ; ; Usage: ; Call IsDotNETInstalled ; Pop $0 ; StrCmp $0 1 found.NETFramework no.NETFramework Function IsDotNETInstalled Push $0 Push $1 Push $2 Push $3 Push $4 ReadRegStr $4 HKEY_LOCAL_MACHINE \ "Software\Microsoft\.NETFramework" "InstallRoot" # remove trailing back slash Push $4 Exch $EXEDIR Exch $EXEDIR Pop $4 # if the root directory doesn't exist .NET is not installed IfFileExists $4 0 noDotNET StrCpy $0 0 EnumStart: EnumRegKey $2 HKEY_LOCAL_MACHINE \ "Software\Microsoft\.NETFramework\Policy" $0 IntOp $0 $0 + 1 StrCmp $2 "" noDotNET StrCpy $1 0 EnumPolicy: EnumRegValue $3 HKEY_LOCAL_MACHINE \ "Software\Microsoft\.NETFramework\Policy\$2" $1 IntOp $1 $1 + 1 StrCmp $3 "" EnumStart IfFileExists "$4\$2.$3" foundDotNET EnumPolicy noDotNET: StrCpy $0 0 Goto done foundDotNET: StrCpy $0 1 done: Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 FunctionEnd
Full Example
Name ".NET Framework Check" OutFile "Check .NET.exe" Caption ".NET Framework Check" ShowInstDetails show Section Call IsDotNETInstalled Pop $R3 StrCmp $R3 0 +3 DetailPrint "Found .NET!" Goto +2 ; else DetailPrint "Can't find .NET!" SectionEnd Function IsDotNETInstalled Push $0 Push $1 Push $2 Push $3 Push $4 ReadRegStr $4 HKEY_LOCAL_MACHINE \ "Software\Microsoft\.NETFramework" "InstallRoot" # remove trailing back slash Push $4 Exch $EXEDIR Exch $EXEDIR Pop $4 # if the root directory doesn't exist .NET is not installed IfFileExists $4 0 noDotNET StrCpy $0 0 EnumStart: EnumRegKey $2 HKEY_LOCAL_MACHINE \ "Software\Microsoft\.NETFramework\Policy" $0 IntOp $0 $0 + 1 StrCmp $2 "" noDotNET StrCpy $1 0 EnumPolicy: EnumRegValue $3 HKEY_LOCAL_MACHINE \ "Software\Microsoft\.NETFramework\Policy\$2" $1 IntOp $1 $1 + 1 StrCmp $3 "" EnumStart IfFileExists "$4\$2.$3" foundDotNET EnumPolicy noDotNET: StrCpy $0 0 Goto done foundDotNET: StrCpy $0 1 done: Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 FunctionEnd