Click here to Skip to main content
15,897,891 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I created one set up in visual studio 2010. I want dot net framework install silently if he is not present in users machine. I created script in NSIS but I am not able to add this framework 4.0. I found so many script in google but no one make more benefit for me. Can any one tell me how to make set up with silent installation of above framework


[Added]

Can u plz tell me how and where to write a program to silently install dot net framework 4.0. I create this script using my set up but it is not working

==================================
; Usage
; 1 Call SetupDotNetSectionIfNeeded from .onInit function
; This function will check if the required version
; or higher version of the .NETFramework is installed.
; If .NET is NOT installed the section which installs dotnetfx is selected.
; If .NET is installed the section which installs dotnetfx is unselected.

#!define SF_USELECTED 0
#!define SF_SELECTED 1
#!define SF_SECGRP 2
#!define SF_BOLD 8
#!define SF_RO 16
#!define SF_EXPAND 32
###############################

!define DOT_MAJOR 4
!define DOT_MINOR 4

!define PRODUCT_NAME "Shiv"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "Idha"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

; MUI 1.67 compatible ------
!include "MUI.nsh"

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES

; Language files
!insertmacro MUI_LANGUAGE "English"

; MUI end ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
InstallDir "$PROGRAMFILES\Shiv"
ShowInstDetails show
ShowUnInstDetails show

Section "MainSection" SEC01
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "D:\SHIV\Projects\PlayGame\Setup1\Debug\Setup1.msi"
SectionEnd

Section -AdditionalIcons
CreateDirectory "$SMPROGRAMS\Shiv"
CreateShortCut "$SMPROGRAMS\Shiv\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd

Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd


Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer."
FunctionEnd

Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2
Abort
FunctionEnd

Section Uninstall
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\Setup1.msi"

Delete "$SMPROGRAMS\Shiv\Uninstall.lnk"

RMDir "$SMPROGRAMS\Shiv"
RMDir "$INSTDIR"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
SetAutoClose true
SectionEnd

!macro SecSelect SecId
Push $0
IntOp $0 ${SF_SELECTED} | ${SF_RO}
SectionSetFlags ${SecId} $0
SectionSetInstTypes ${SecId} 1
Pop $0
!macroend

!define SelectSection '!insertmacro SecSelect'
#################################

!macro SecUnSelect SecId
Push $0
IntOp $0 ${SF_USELECTED} | ${SF_RO}
SectionSetFlags ${SecId} $0
SectionSetText ${SecId} ""
Pop $0
!macroend

!define UnSelectSection '!insertmacro SecUnSelect'
###################################

!macro SecExtract SecId
Push $0
IntOp $0 ${SF_USELECTED} | ${SF_RO}
SectionSetFlags ${SecId} $0
SectionSetInstTypes ${SecId} 2
Pop $0
!macroend

!define SetSectionExtract '!insertmacro SecExtract'
###################################

!macro Groups GroupId
Push $0
SectionGetFlags ${GroupId} $0
IntOp $0 $0 | ${SF_RO}
IntOp $0 $0 ^ ${SF_BOLD}
IntOp $0 $0 ^ ${SF_EXPAND}
SectionSetFlags ${GroupId} $0
Pop $0
!macroend

!define SetSectionGroup "!insertmacro Groups"
####################################

!macro GroupRO GroupId
Push $0
IntOp $0 ${SF_SECGRP} | ${SF_RO}
SectionSetFlags ${GroupId} $0
Pop $0
!macroend

!define MakeGroupReadOnly '!insertmacro GroupRO'

Function SetupDotNetSectionIfNeeded

StrCpy $0 "0"
StrCpy $1 "SOFTWARE\Microsoft\.NETFramework" ;registry entry to look in.
StrCpy $2 0

StartEnum:
;Enumerate the versions installed.
EnumRegKey $3 HKLM "$1\policy" $2

;If we don't find any versions installed, it's not here.
StrCmp $3 "" noDotNet notEmpty

;We found something.
notEmpty:
;Find out if the RegKey starts with 'v'.
;If it doesn't, goto the next key.
StrCpy $4 $3 1 0
StrCmp $4 "v" +1 goNext
StrCpy $4 $3 1 1

;It starts with 'v'. Now check to see how the installed major version
;relates to our required major version.
;If it's equal check the minor version, if it's greater,
;we found a good RegKey.
IntCmp $4 ${DOT_MAJOR} +1 goNext yesDotNetReg
;Check the minor version. If it's equal or greater to our requested
;version then we're good.
StrCpy $4 $3 1 3
IntCmp $4 ${DOT_MINOR} yesDotNetReg goNext yesDotNetReg

goNext:
;Go to the next RegKey.
IntOp $2 $2 + 1
goto StartEnum

yesDotNetReg:
;Now that we've found a good RegKey, let's make sure it's actually
;installed by getting the install path and checking to see if the
;mscorlib.dll exists.
EnumRegValue $2 HKLM "$1\policy\$3" 0
;$2 should equal whatever comes after the major and minor versions
;(ie, v1.1.4322)
StrCmp $2 "" noDotNet
ReadRegStr $4 HKLM $1 "InstallRoot"
;Hopefully the install root isn't empty.
StrCmp $4 "" noDotNet
;build the actuall directory path to mscorlib.dll.
StrCpy $4 "$4$3.$2\mscorlib.dll"
IfFileExists $4 yesDotNet noDotNet

noDotNet:
${SelectSection} ${SECDOTNET}
goto done

yesDotNet:
;Everything checks out. Go on with the rest of the installation.
${UnSelectSection} ${SECDOTNET}
goto done

done:
;All done.

FunctionEnd

!define BASE_URL http://download.microsoft.com/download
; .NET Framework
; English
!define URL_DOTNET_1033 "http://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe"

; ... If you need one not listed above you will have to visit the Microsoft Download site,
; select the language you are after and scan the page source to obtain the link.


Var "LANGUAGE_DLL_TITLE"
Var "LANGUAGE_DLL_INFO"
Var "URL_DOTNET"
Var "OSLANGUAGE"
Var "DOTNET_RETURN_CODE"


LangString DESC_REMAINING ${LANG_ENGLISH} " (%d %s%s remaining)"
LangString DESC_PROGRESS ${LANG_ENGLISH} "%d.%01dkB/s" ;"%dkB (%d%%) of %dkB @ %d.%01dkB/s"
LangString DESC_PLURAL ${LANG_ENGLISH} "s"
LangString DESC_HOUR ${LANG_ENGLISH} "hour"
LangString DESC_MINUTE ${LANG_ENGLISH} "minute"
LangString DESC_SECOND ${LANG_ENGLISH} "second"
LangString DESC_CONNECTING ${LANG_ENGLISH} "Connecting..."
LangString DESC_DOWNLOADING ${LANG_ENGLISH} "Downloading %s"
LangString DESC_SHORTDOTNET ${LANG_ENGLISH} "Microsoft .Net Framework 4.0"
LangString DESC_LONGDOTNET ${LANG_ENGLISH} "Microsoft .Net Framework 4.0"
LangString DESC_DOTNET_DECISION ${LANG_ENGLISH} "$(DESC_SHORTDOTNET) is required.$\nIt is strongly \
advised that you install$\n$(DESC_SHORTDOTNET) before continuing.$\nIf you choose to continue, \
you will need to connect$\nto the internet before proceeding.$\nWould you like to continue with \
the installation?"
LangString SEC_DOTNET ${LANG_ENGLISH} "$(DESC_SHORTDOTNET) "
LangString DESC_INSTALLING ${LANG_ENGLISH} "Installing"
LangString DESC_DOWNLOADING1 ${LANG_ENGLISH} "Downloading"
LangString DESC_DOWNLOADFAILED ${LANG_ENGLISH} "Download Failed:"
LangString ERROR_DOTNET_DUPLICATE_INSTANCE ${LANG_ENGLISH} "The $(DESC_SHORTDOTNET) Installer is \
already running."
LangString ERROR_NOT_ADMINISTRATOR ${LANG_ENGLISH} "$(DESC_000022)"
LangString ERROR_INVALID_PLATFORM ${LANG_ENGLISH} "$(DESC_000023)"
LangString DESC_DOTNET_TIMEOUT ${LANG_ENGLISH} "The installation of the $(DESC_SHORTDOTNET) \
has timed out."
LangString ERROR_DOTNET_INVALID_PATH ${LANG_ENGLISH} "The $(DESC_SHORTDOTNET) Installation$\n\
was not found in the following location:$\n"
LangString ERROR_DOTNET_FATAL ${LANG_ENGLISH} "A fatal error occurred during the installation$\n\
of the $(DESC_SHORTDOTNET)."
LangString FAILED_DOTNET_INSTALL ${LANG_ENGLISH} "The installation of $(PRODUCT_NAME) will$\n\
continue. However, it may not function properly$\nuntil $(DESC_SHORTDOTNET)$\nis installed."


Section $(SEC_DOTNET) SECDOTNET
SectionIn RO
IfSilent lbl_IsSilent
!define DOTNETFILESDIR "Common\Files\MSNET"
StrCpy $DOTNET_RETURN_CODE "0"
!ifdef DOTNET_ONCD_1033
StrCmp "$OSLANGUAGE" "1033" 0 lbl_Not1033
SetOutPath "$PLUGINSDIR"
file /r "${DOTNETFILESDIR}\dotNetFx40_Full_x86_x64.exe"
DetailPrint "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
Banner::show /NOUNLOAD "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
nsExec::ExecToStack '"$PLUGINSDIR\dotNetFx40_Full_x86_x64.exe" /q /c:"install.exe /noaspupgrade /q"'
pop $DOTNET_RETURN_CODE
Banner::destroy
SetRebootFlag true
Goto lbl_NoDownloadRequired
lbl_Not1033:
!endif
; Insert Other language blocks here

; the following Goto and Label is for consistency.
Goto lbl_DownloadRequired
lbl_DownloadRequired:
DetailPrint "$(DESC_DOWNLOADING1) $(DESC_SHORTDOTNET)..."
MessageBox MB_ICONEXCLAMATION|MB_YESNO|MB_DEFBUTTON2 "$(DESC_DOTNET_DECISION)" /SD IDNO \
IDYES +2 IDNO 0
Abort
; "Downloading Microsoft .Net Framework"
AddSize 153600
nsisdl::download /TRANSLATE "$(DESC_DOWNLOADING)" "$(DESC_CONNECTING)" \
"$(DESC_SECOND)" "$(DESC_MINUTE)" "$(DESC_HOUR)" "$(DESC_PLURAL)" \
"$(DESC_PROGRESS)" "$(DESC_REMAINING)" \
/TIMEOUT=30000 "$URL_DOTNET" "$PLUGINSDIR\dotNetFx40_Full_x86_x64.exe"
Pop $0
StrCmp "$0" "success" lbl_continue
DetailPrint "$(DESC_DOWNLOADFAILED) $0"
Abort

lbl_continue:
DetailPrint "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
Banner::show /NOUNLOAD "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
nsExec::ExecToStack '"$PLUGINSDIR\dotNetFx40_Full_x86_x64.exe" /q /c:"install.exe /noaspupgrade /q"'
pop $DOTNET_RETURN_CODE
Banner::destroy
SetRebootFlag true
; silence the compiler
Goto lbl_NoDownloadRequired
lbl_NoDownloadRequired:

; obtain any error code and inform the user ($DOTNET_RETURN_CODE)
; If nsExec is unable to execute the process,
; it will return "error"
; If the process timed out it will return "timeout"
; else it will return the return code from the executed process.
StrCmp "$DOTNET_RETURN_CODE" "" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "0" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "3010" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "8192" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "error" lbl_Error
StrCmp "$DOTNET_RETURN_CODE" "timeout" lbl_TimeOut
; It's a .Net Error
StrCmp "$DOTNET_RETURN_CODE" "4101" lbl_Error_DuplicateInstance
StrCmp "$DOTNET_RETURN_CODE" "4097" lbl_Error_NotAdministrator
StrCmp "$DOTNET_RETURN_CODE" "1633" lbl_Error_InvalidPlatform lbl_FatalError
; all others are fatal

lbl_Error_DuplicateInstance:
DetailPrint "$(ERROR_DOTNET_DUPLICATE_INSTANCE)"
GoTo lbl_Done

lbl_Error_NotAdministrator:
DetailPrint "$(ERROR_NOT_ADMINISTRATOR)"
GoTo lbl_Done

lbl_Error_InvalidPlatform:
DetailPrint "$(ERROR_INVALID_PLATFORM)"
GoTo lbl_Done

lbl_TimeOut:
DetailPrint "$(DESC_DOTNET_TIMEOUT)"
GoTo lbl_Done

lbl_Error:
DetailPrint "$(ERROR_DOTNET_INVALID_PATH)"
GoTo lbl_Done

lbl_FatalError:
DetailPrint "$(ERROR_DOTNET_FATAL)[$DOTNET_RETURN_CODE]"
GoTo lbl_Done

lbl_Done:
DetailPrint "$(FAILED_DOTNET_INSTALL)"
lbl_NoError:
lbl_IsSilent:
SectionEnd


===================

[/Added]
Posted
Updated 16-Dec-12 19:44pm
v2

Here[^]. You may need to write a program that runs the installer with a command line argument, not an NSIS script.
 
Share this answer
 
Can u plz tell me how and where to write a program to silently install dot net framework 4.0. I create this script using my set up but it is not working

==================================
; Usage
; 1 Call SetupDotNetSectionIfNeeded from .onInit function
; This function will check if the required version
; or higher version of the .NETFramework is installed.
; If .NET is NOT installed the section which installs dotnetfx is selected.
; If .NET is installed the section which installs dotnetfx is unselected.

#!define SF_USELECTED 0
#!define SF_SELECTED 1
#!define SF_SECGRP 2
#!define SF_BOLD 8
#!define SF_RO 16
#!define SF_EXPAND 32
###############################

!define DOT_MAJOR 4
!define DOT_MINOR 4

!define PRODUCT_NAME "Shiv"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "Idha"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

; MUI 1.67 compatible ------
!include "MUI.nsh"

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES

; Language files
!insertmacro MUI_LANGUAGE "English"

; MUI end ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
InstallDir "$PROGRAMFILES\Shiv"
ShowInstDetails show
ShowUnInstDetails show

Section "MainSection" SEC01
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "D:\SHIV\Projects\PlayGame\Setup1\Debug\Setup1.msi"
SectionEnd

Section -AdditionalIcons
CreateDirectory "$SMPROGRAMS\Shiv"
CreateShortCut "$SMPROGRAMS\Shiv\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd

Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd


Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer."
FunctionEnd

Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2
Abort
FunctionEnd

Section Uninstall
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\Setup1.msi"

Delete "$SMPROGRAMS\Shiv\Uninstall.lnk"

RMDir "$SMPROGRAMS\Shiv"
RMDir "$INSTDIR"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
SetAutoClose true
SectionEnd

!macro SecSelect SecId
Push $0
IntOp $0 ${SF_SELECTED} | ${SF_RO}
SectionSetFlags ${SecId} $0
SectionSetInstTypes ${SecId} 1
Pop $0
!macroend

!define SelectSection '!insertmacro SecSelect'
#################################

!macro SecUnSelect SecId
Push $0
IntOp $0 ${SF_USELECTED} | ${SF_RO}
SectionSetFlags ${SecId} $0
SectionSetText ${SecId} ""
Pop $0
!macroend

!define UnSelectSection '!insertmacro SecUnSelect'
###################################

!macro SecExtract SecId
Push $0
IntOp $0 ${SF_USELECTED} | ${SF_RO}
SectionSetFlags ${SecId} $0
SectionSetInstTypes ${SecId} 2
Pop $0
!macroend

!define SetSectionExtract '!insertmacro SecExtract'
###################################

!macro Groups GroupId
Push $0
SectionGetFlags ${GroupId} $0
IntOp $0 $0 | ${SF_RO}
IntOp $0 $0 ^ ${SF_BOLD}
IntOp $0 $0 ^ ${SF_EXPAND}
SectionSetFlags ${GroupId} $0
Pop $0
!macroend

!define SetSectionGroup "!insertmacro Groups"
####################################

!macro GroupRO GroupId
Push $0
IntOp $0 ${SF_SECGRP} | ${SF_RO}
SectionSetFlags ${GroupId} $0
Pop $0
!macroend

!define MakeGroupReadOnly '!insertmacro GroupRO'

Function SetupDotNetSectionIfNeeded

StrCpy $0 "0"
StrCpy $1 "SOFTWARE\Microsoft\.NETFramework" ;registry entry to look in.
StrCpy $2 0

StartEnum:
;Enumerate the versions installed.
EnumRegKey $3 HKLM "$1\policy" $2

;If we don't find any versions installed, it's not here.
StrCmp $3 "" noDotNet notEmpty

;We found something.
notEmpty:
;Find out if the RegKey starts with 'v'.
;If it doesn't, goto the next key.
StrCpy $4 $3 1 0
StrCmp $4 "v" +1 goNext
StrCpy $4 $3 1 1

;It starts with 'v'. Now check to see how the installed major version
;relates to our required major version.
;If it's equal check the minor version, if it's greater,
;we found a good RegKey.
IntCmp $4 ${DOT_MAJOR} +1 goNext yesDotNetReg
;Check the minor version. If it's equal or greater to our requested
;version then we're good.
StrCpy $4 $3 1 3
IntCmp $4 ${DOT_MINOR} yesDotNetReg goNext yesDotNetReg

goNext:
;Go to the next RegKey.
IntOp $2 $2 + 1
goto StartEnum

yesDotNetReg:
;Now that we've found a good RegKey, let's make sure it's actually
;installed by getting the install path and checking to see if the
;mscorlib.dll exists.
EnumRegValue $2 HKLM "$1\policy\$3" 0
;$2 should equal whatever comes after the major and minor versions
;(ie, v1.1.4322)
StrCmp $2 "" noDotNet
ReadRegStr $4 HKLM $1 "InstallRoot"
;Hopefully the install root isn't empty.
StrCmp $4 "" noDotNet
;build the actuall directory path to mscorlib.dll.
StrCpy $4 "$4$3.$2\mscorlib.dll"
IfFileExists $4 yesDotNet noDotNet

noDotNet:
${SelectSection} ${SECDOTNET}
goto done

yesDotNet:
;Everything checks out. Go on with the rest of the installation.
${UnSelectSection} ${SECDOTNET}
goto done

done:
;All done.

FunctionEnd

!define BASE_URL http://download.microsoft.com/download
; .NET Framework
; English
!define URL_DOTNET_1033 "http://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe"

; ... If you need one not listed above you will have to visit the Microsoft Download site,
; select the language you are after and scan the page source to obtain the link.


Var "LANGUAGE_DLL_TITLE"
Var "LANGUAGE_DLL_INFO"
Var "URL_DOTNET"
Var "OSLANGUAGE"
Var "DOTNET_RETURN_CODE"


LangString DESC_REMAINING ${LANG_ENGLISH} " (%d %s%s remaining)"
LangString DESC_PROGRESS ${LANG_ENGLISH} "%d.%01dkB/s" ;"%dkB (%d%%) of %dkB @ %d.%01dkB/s"
LangString DESC_PLURAL ${LANG_ENGLISH} "s"
LangString DESC_HOUR ${LANG_ENGLISH} "hour"
LangString DESC_MINUTE ${LANG_ENGLISH} "minute"
LangString DESC_SECOND ${LANG_ENGLISH} "second"
LangString DESC_CONNECTING ${LANG_ENGLISH} "Connecting..."
LangString DESC_DOWNLOADING ${LANG_ENGLISH} "Downloading %s"
LangString DESC_SHORTDOTNET ${LANG_ENGLISH} "Microsoft .Net Framework 4.0"
LangString DESC_LONGDOTNET ${LANG_ENGLISH} "Microsoft .Net Framework 4.0"
LangString DESC_DOTNET_DECISION ${LANG_ENGLISH} "$(DESC_SHORTDOTNET) is required.$\nIt is strongly \
advised that you install$\n$(DESC_SHORTDOTNET) before continuing.$\nIf you choose to continue, \
you will need to connect$\nto the internet before proceeding.$\nWould you like to continue with \
the installation?"
LangString SEC_DOTNET ${LANG_ENGLISH} "$(DESC_SHORTDOTNET) "
LangString DESC_INSTALLING ${LANG_ENGLISH} "Installing"
LangString DESC_DOWNLOADING1 ${LANG_ENGLISH} "Downloading"
LangString DESC_DOWNLOADFAILED ${LANG_ENGLISH} "Download Failed:"
LangString ERROR_DOTNET_DUPLICATE_INSTANCE ${LANG_ENGLISH} "The $(DESC_SHORTDOTNET) Installer is \
already running."
LangString ERROR_NOT_ADMINISTRATOR ${LANG_ENGLISH} "$(DESC_000022)"
LangString ERROR_INVALID_PLATFORM ${LANG_ENGLISH} "$(DESC_000023)"
LangString DESC_DOTNET_TIMEOUT ${LANG_ENGLISH} "The installation of the $(DESC_SHORTDOTNET) \
has timed out."
LangString ERROR_DOTNET_INVALID_PATH ${LANG_ENGLISH} "The $(DESC_SHORTDOTNET) Installation$\n\
was not found in the following location:$\n"
LangString ERROR_DOTNET_FATAL ${LANG_ENGLISH} "A fatal error occurred during the installation$\n\
of the $(DESC_SHORTDOTNET)."
LangString FAILED_DOTNET_INSTALL ${LANG_ENGLISH} "The installation of $(PRODUCT_NAME) will$\n\
continue. However, it may not function properly$\nuntil $(DESC_SHORTDOTNET)$\nis installed."


Section $(SEC_DOTNET) SECDOTNET
SectionIn RO
IfSilent lbl_IsSilent
!define DOTNETFILESDIR "Common\Files\MSNET"
StrCpy $DOTNET_RETURN_CODE "0"
!ifdef DOTNET_ONCD_1033
StrCmp "$OSLANGUAGE" "1033" 0 lbl_Not1033
SetOutPath "$PLUGINSDIR"
file /r "${DOTNETFILESDIR}\dotNetFx40_Full_x86_x64.exe"
DetailPrint "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
Banner::show /NOUNLOAD "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
nsExec::ExecToStack '"$PLUGINSDIR\dotNetFx40_Full_x86_x64.exe" /q /c:"install.exe /noaspupgrade /q"'
pop $DOTNET_RETURN_CODE
Banner::destroy
SetRebootFlag true
Goto lbl_NoDownloadRequired
lbl_Not1033:
!endif
; Insert Other language blocks here

; the following Goto and Label is for consistency.
Goto lbl_DownloadRequired
lbl_DownloadRequired:
DetailPrint "$(DESC_DOWNLOADING1) $(DESC_SHORTDOTNET)..."
MessageBox MB_ICONEXCLAMATION|MB_YESNO|MB_DEFBUTTON2 "$(DESC_DOTNET_DECISION)" /SD IDNO \
IDYES +2 IDNO 0
Abort
; "Downloading Microsoft .Net Framework"
AddSize 153600
nsisdl::download /TRANSLATE "$(DESC_DOWNLOADING)" "$(DESC_CONNECTING)" \
"$(DESC_SECOND)" "$(DESC_MINUTE)" "$(DESC_HOUR)" "$(DESC_PLURAL)" \
"$(DESC_PROGRESS)" "$(DESC_REMAINING)" \
/TIMEOUT=30000 "$URL_DOTNET" "$PLUGINSDIR\dotNetFx40_Full_x86_x64.exe"
Pop $0
StrCmp "$0" "success" lbl_continue
DetailPrint "$(DESC_DOWNLOADFAILED) $0"
Abort

lbl_continue:
DetailPrint "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
Banner::show /NOUNLOAD "$(DESC_INSTALLING) $(DESC_SHORTDOTNET)..."
nsExec::ExecToStack '"$PLUGINSDIR\dotNetFx40_Full_x86_x64.exe" /q /c:"install.exe /noaspupgrade /q"'
pop $DOTNET_RETURN_CODE
Banner::destroy
SetRebootFlag true
; silence the compiler
Goto lbl_NoDownloadRequired
lbl_NoDownloadRequired:

; obtain any error code and inform the user ($DOTNET_RETURN_CODE)
; If nsExec is unable to execute the process,
; it will return "error"
; If the process timed out it will return "timeout"
; else it will return the return code from the executed process.
StrCmp "$DOTNET_RETURN_CODE" "" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "0" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "3010" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "8192" lbl_NoError
StrCmp "$DOTNET_RETURN_CODE" "error" lbl_Error
StrCmp "$DOTNET_RETURN_CODE" "timeout" lbl_TimeOut
; It's a .Net Error
StrCmp "$DOTNET_RETURN_CODE" "4101" lbl_Error_DuplicateInstance
StrCmp "$DOTNET_RETURN_CODE" "4097" lbl_Error_NotAdministrator
StrCmp "$DOTNET_RETURN_CODE" "1633" lbl_Error_InvalidPlatform lbl_FatalError
; all others are fatal

lbl_Error_DuplicateInstance:
DetailPrint "$(ERROR_DOTNET_DUPLICATE_INSTANCE)"
GoTo lbl_Done

lbl_Error_NotAdministrator:
DetailPrint "$(ERROR_NOT_ADMINISTRATOR)"
GoTo lbl_Done

lbl_Error_InvalidPlatform:
DetailPrint "$(ERROR_INVALID_PLATFORM)"
GoTo lbl_Done

lbl_TimeOut:
DetailPrint "$(DESC_DOTNET_TIMEOUT)"
GoTo lbl_Done

lbl_Error:
DetailPrint "$(ERROR_DOTNET_INVALID_PATH)"
GoTo lbl_Done

lbl_FatalError:
DetailPrint "$(ERROR_DOTNET_FATAL)[$DOTNET_RETURN_CODE]"
GoTo lbl_Done

lbl_Done:
DetailPrint "$(FAILED_DOTNET_INSTALL)"
lbl_NoError:
lbl_IsSilent:
SectionEnd


===================
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900