杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2128|回复: 0

NSIS制作安装包实例

[复制链接]
发表于 2016-9-2 14:54:07 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. ;NSIS Modern User Interface
  2. ;Basic Example Script
  3. ;Written by Joost Verburg

  4. !Define Product "MySoft"
  5. !Define NAME_JP "我的软件"
  6. !Define Company "俺公司"
  7. !Define Version "1.0.0"

  8. !Define LocalMtExpertsDir "C:\Program Files (x86)\MetaTrader 4"
  9. !Define ROOT ".........\Release"
  10. !Define RegUninstall "Software\Microsoft\Windows\CurrentVersion\Uninstall\${Product}"

  11. ;--------------------------------
  12. ;Include Modern UI

  13.   !include "MUI.nsh"

  14. ;--------------------------------
  15. ;General

  16.   ;Name and file
  17.   Name "${NAME_JP}"
  18.   OutFile "${Product}_${Version}_setup.exe"

  19.   ;Default installation folder
  20.   InstallDir "$PROGRAMFILES\${Company}\${Product}"
  21.   
  22.   ;Get installation folder from registry if available
  23.   InstallDirRegKey HKCU "Software\${Company}\${Product}" ""

  24. ;--------------------------------
  25. ;Variables

  26.   Var MUI_TEMP
  27.   Var STARTMENU_FOLDER

  28.   Var MT_DIR
  29.   Var MT_DIR_CTRL
  30. ;--------------------------------
  31. ;Interface Settings

  32.   !define MUI_ABORTWARNING

  33. Function setChooseMtArea
  34. !insertmacro MUI_HEADER_TEXT "MetaTrader 4的文件夹" "请选择MetaTrader 4所在的文件夹。"
  35. !insertmacro MUI_INSTALLOPTIONS_WRITE "mt4dir.ini" "Field 2" "State" "$PROGRAMFILES\Metatrader 4"
  36. !insertmacro MUI_INSTALLOPTIONS_DISPLAY "mt4dir.ini"
  37. FunctionEnd

  38. Function setChooseMtAreaLeave
  39. !insertmacro MUI_INSTALLOPTIONS_READ $MT_DIR_CTRL "mt4dir.ini" "Field 2" "HWND"
  40. !insertmacro MUI_INSTALLOPTIONS_READ $MT_DIR "mt4dir.ini" "Field 2" "State"
  41. recheck:
  42. ${If} $MT_DIR == ""
  43.     MessageBox MB_OK "MetaTrader 4のフォルダーを選択してください。"
  44.     Abort
  45. ${Else}
  46.     IfFileExists $MT_DIR\experts\*.* 0 +2
  47.     goto skip
  48.     MessageBox MB_OKCANCEL "所选文件夹中未找到MetaTrader 4。$\n需要为您安装MetaTrader 4吗?" IDCANCEL +6
  49.     SetOutPath "$TEMP"
  50.     File "${ROOT}mt4setup.exe"
  51.     ExecWait '"$TEMP\mt4setup.exe" '
  52.     Delete "$TEMP\mt4setup.exe"
  53.     goto recheck
  54.     Abort
  55.     skip:   
  56. ${EndIf}

  57. FunctionEnd

  58. ;--------------------------------
  59. ;Pages

  60.   !insertmacro MUI_PAGE_LICENSE "${ROOT}License.txt"
  61.   !insertmacro MUI_PAGE_COMPONENTS
  62.   !insertmacro MUI_PAGE_DIRECTORY
  63.   Page custom setChooseMtArea setChooseMtAreaLeave ""

  64.   ;Start Menu Folder Page Configuration
  65.   !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
  66.   !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${Company}\${Product}"
  67.   !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
  68.   
  69.   !insertmacro MUI_PAGE_STARTMENU ${Product} $STARTMENU_FOLDER

  70.   !insertmacro MUI_PAGE_INSTFILES
  71.   
  72.   !insertmacro MUI_UNPAGE_CONFIRM
  73.   !insertmacro MUI_UNPAGE_INSTFILES

  74.   ; Finish page
  75.   !define MUI_FINISHPAGE_RUN "$INSTDIR\${Product}.exe"
  76.   ;Exec "$INSTDIR\${Product}.exe /regserver"
  77.   !define MUI_FINISHPAGE_RUN_NOTCHECKED
  78.   !insertmacro MUI_PAGE_FINISH
  79. ;--------------------------------
  80. ;Languages

  81.   !insertmacro MUI_LANGUAGE "Japanese"
  82.   ;!insertmacro MUI_LANGUAGE "English"
  83.   
  84. RequestExecutionLevel admin

  85. ;--------------------------------
  86. ;Installer Sections
  87. Section ${NAME_JP} SecDummy
  88. SetShellVarContext all

  89.   ReadRegStr $4 HKEY_LOCAL_MACHINE \
  90.     "Software\Microsoft\NET Framework Setup\NDP\v3.5" "SP"
  91.   STRCMP $4 1 SKIP NOSKIP
  92. ;      Exec "$INSTDIR\${Product}.exe /regserver"
  93. ;  abort
  94.   NOSKIP:
  95.   MESSAGEBOX  mb_ok "本产品需要Microsoft .NET Framework 3.5 SP1或以后的版本支持。"
  96.   NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/0/6/1/061F001C-8752-4600-A198-53214C69B51F/dotnetfx35setup.exe" "$TEMP\dotNetFx35setup.exe"
  97.   ExecWait '"$TEMP\dotNetFx35setup.exe" '
  98.   ;Delete "$TEMP\dotNetFx35setup.exe"
  99.   SKIP:

  100.   SetOutPath "$INSTDIR"
  101.     File /oname=${Product}.exe "${ROOT}${Product}.exe"
  102.     File "${ROOT}*.dll"
  103.     File "${ROOT}${Product}.exe.config"
  104.     File "${ROOT}XXX2.ico"
  105.     File "${LocalMtExpertsDir}\experts\libraries\XXX.dll"
  106.     File "${LocalMtExpertsDir}\experts\indicators\XXX.ex4"
  107.     File "${LocalMtExpertsDir}\experts\scripts\XXX.ex4"   
  108.    
  109.   SetOutPath "$INSTDIR\Sound"
  110.     File "${ROOT}Sound\*.wav"
  111.         
  112.   SetOutPath "$INSTDIR\Help"
  113.     File "${ROOT}Help\*.chm"

  114.   SetOutPath "$MT_DIR"
  115.     File "${LocalMtExpertsDir}\XXX.dll"
  116.     File "${LocalMtExpertsDir}\Fann.Net.dll"
  117.     File "${ROOT}fanndoubleMT.dll"
  118.     File "${ROOT}System.Windows.Forms.DataVisualization.dll"

  119.   SetOutPath "$MT_DIR\experts\indicators"
  120.     File "${LocalMtExpertsDir}\experts\indicators\XXX.ex4"

  121.   SetOutPath "$MT_DIR\experts\scripts"
  122.     File "${LocalMtExpertsDir}\experts\scripts\XXX.ex4"

  123.   SetOutPath "$MT_DIR\experts\libraries"
  124.     File "${LocalMtExpertsDir}\experts\libraries\XXX.dll"
  125.    
  126. ;Create uninstaller
  127.   WriteUninstaller "$INSTDIR\Uninstall.exe"
  128.     WriteRegStr   HKLM "${RegUninstall}" "DisplayName"     ${NAME_JP}
  129.   WriteRegStr   HKLM "${RegUninstall}" "UninstallString" "$INSTDIR\Uninstall.exe"
  130.   WriteRegStr   HKLM "${RegUninstall}" "HelpLink"        "http://www.internal.co.jp/support/"
  131.   WriteRegDWORD HKLM "${RegUninstall}" "NoModify"        1
  132.   WriteRegDWORD HKLM "${RegUninstall}" "NoRepair"        1
  133.   WriteRegStr   HKLM "${RegUninstall}" "MtDir"           "$MT_DIR"
  134.   WriteRegStr   HKLM "${RegUninstall}" "MainDir"           "$INSTDIR"

  135.   WriteRegStr   HKCR ".xxx" "" "XXX.file"
  136.   WriteRegStr   HKCR "XXX.file" "" "XXXファイル (.xxx)"
  137.   WriteRegStr   HKCR "XXX.file\DefaultIcon" "" "$INSTDIR\XXX.ico"
  138.   WriteRegStr   HKCR "XXX.file\shell" "" ""
  139.   WriteRegStr   HKCR "XXX.file\shell\open" "" ""
  140.   WriteRegStr   HKCR "XXX.file\shell\open\command" "" '"$INSTDIR\${Product}.exe" "%1"'

  141.   !insertmacro MUI_STARTMENU_WRITE_BEGIN ${Product}
  142.   SetOutPath "$INSTDIR"
  143.   CreateShortCut "$DESKTOP\${NAME_JP}.lnk" "$INSTDIR\${Product}.exe"
  144.   CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
  145.   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${NAME_JP}.lnk" "$INSTDIR\${Product}.exe"
  146.   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\uninstall.lnk" "$INSTDIR\Uninstall.exe"
  147.   !insertmacro MUI_STARTMENU_WRITE_END
  148.   
  149.   System::Call 'shell32.dll::SHChangeNotify(l, l, i, i) v (0x08000000, 0, 0, 0)'
  150.   

  151. SectionEnd

  152. ;--------------------------------
  153. ;Descriptions

  154.   ;Language strings
  155.   LangString DESC_SecDummy ${LANG_ENGLISH} "${NAME_JP} 执行程序。"
  156.   ;LangString DESC_SecDummy ${LANG_ENGLISH} "This is ${NAME_JP}."

  157.   ;Assign language strings to sections
  158.   !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  159.     !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
  160.   !insertmacro MUI_FUNCTION_DESCRIPTION_END

  161. ;--------------------------------
  162. ;Uninstaller Section

  163. Section "Uninstall"
  164. SetShellVarContext all
  165.   ;ADD YOUR OWN FILES HERE..

  166.   ReadRegStr $MT_DIR HKLM "${RegUninstall}" "MtDir"
  167.   
  168.   Delete "$INSTDIR\Uninstall.exe"
  169.     Delete "$INSTDIR\${Product}.exe"
  170.     Delete "$INSTDIR\*.ico"
  171.     Delete "$INSTDIR\*.config"
  172.     Delete "$INSTDIR\*.dll"
  173.     Delete "$INSTDIR\*.ini"
  174.     Delete "$INSTDIR\*.log"
  175.     Delete "$INSTDIR\*.wav"
  176.     Delete "$INSTDIR\*.db"
  177.     Delete "$INSTDIR\*.xxx"
  178.     Delete "$INSTDIR\*.chm"
  179.     Delete "$INSTDIR\Help\*.chm"
  180.     Delete "$INSTDIR\Sound\*.wav"
  181.     Delete "$INSTDIR\Models\*.xxx"
  182.     Delete "$INSTDIR\Models\NetResults\*.xxx"
  183.    
  184.   Delete "$MT_DIR\experts\libraries\XXX.dll"
  185.   Delete "$MT_DIR\experts\scripts\XXX.ex4"
  186.   Delete "$MT_DIR\experts\indicators\XXX.ex4"
  187.   Delete "$MT_DIR\XXXX.dll"
  188.   Delete "$MT_DIR\Fann.Net.dll"
  189.   Delete "$MT_DIR\fanndoubleMT.dll"
  190.   Delete "$MT_DIR\System.Windows.Forms.DataVisualization.dll"

  191.   !insertmacro MUI_STARTMENU_GETFOLDER ${Product} $MUI_TEMP
  192.   Delete "$DESKTOP\${NAME_JP}.lnk"  
  193.   Delete "$SMPROGRAMS\$MUI_TEMP\*.lnk"
  194.   RMDir "$SMPROGRAMS\$MUI_TEMP"
  195.   RMDir "$INSTDIR\Help"
  196.   RMDir "$INSTDIR\Sound"
  197.   RMDir "$INSTDIR\Models\NetResults"
  198.   RMDir "$INSTDIR\Models"
  199.   RMDir "$INSTDIR"


  200.   DeleteRegKey   HKCR ".xxx"
  201.   DeleteRegKey   HKCR "XXX.file"
  202.   DeleteRegKey HKLM "${RegUninstall}"

  203.   System::Call 'shell32.dll::SHChangeNotify(l, l, i, i) v (0x08000000, 0, 0, 0)'
  204. SectionEnd

  205. ;Function .onInstSuccess
  206.     ;Exec "$INSTDIR\${Product}.exe /regserver"
  207. ;FunctionEnd

  208. Function .onInit
  209.     !insertmacro MUI_INSTALLOPTIONS_EXTRACT "mt4dir.ini"
  210.     ReadRegStr $0 HKLM "${RegUninstall}" "DisplayName"
  211.     StrCmp $0 "" noabort3
  212.     MessageBox MB_OK "${NAME_JP}已经安装,请先卸载。"
  213.     ;MessageBox MB_OK "${NAME_JP} has already been installed. Please uninstall the programm and restart the install procedure."
  214.   Abort ; causes installer to quit.
  215.     noabort3:
  216. FunctionEnd
  217. Function un.onInit
  218.     Push $R0
  219.     CheckProc:
  220.     Push "${Product}.exe"
  221.     ProcessWork::existsprocess
  222.     Pop $R0
  223.     IntCmp $R0 0 GetDir
  224.     MessageBox MB_OKCANCEL|MB_ICONSTOP "${NAME_JP}正在运行。$\r$\n${NAME_JP}强制结束吗?" IDCANCEL abort
  225.     Push "${Product}.exe"
  226.     Processwork::KillProcess
  227.     Sleep 1000
  228.     goto CheckProc
  229.     abort:
  230.     Abort
  231.     GetDir:        
  232. FunctionEnd
  233. Icon "${ROOT}Setup.ico"
  234. UninstallIcon "${ROOT}Setup.ico"
复制代码
这个过程中,加入了一个自定义的页面选择Metatrader所在的文件夹。除了上述代码外,还需要一个描述页面用的ini文件(通过NSIS图形工具制作)
游客,如果您要查看本帖隐藏内容请回复


双击执行,即可完成创建安装包,并上传至服务器。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-19 21:26 , Processed in 0.113586 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表