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 ===== ============== [/已添加]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}" SectionEndFunction 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]推荐答案 {PRODUCT_NAME} !定义PRODUCT_UNINST_ROOT_KEYHKLM ; MUI 1.67兼容------ !包括MUI.nsh ; MUI设置 !定义MUI_ABORTWARNING !定义MUI_ICON{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-install.ico" !define MUI_UNICON " {NSISDIR} \Contrib\Graphics\Icons\modern-uninstall.ico b $ b ;欢迎页面 !insertmacro MUI_PAGE_WELCOME ;目录页 !insertmacro MUI_PAGE_DIRECTORY ; Instfiles页面 !insertmacro MUI_PAGE_INSTFILES ;完成页面 !insertmacro MUI_PAGE_FINISH ;卸载程序页面 !insertmacro MUI_UNPAGE_INSTFILES ;语言文件 !insertmacro MUI_LANGUAGE英语 ; MUI结束------ 名称{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 " 这篇关于如何静默安装dot net framework 4.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-23 19:01