NSIS制作安装包实例
nsi文件例子如下
;NSIS Modern User Interface;Basic Example Script;Written by Joost Verburg !Define Product "MySoft"!Define NAME_JP "我的软件"!Define Company "俺公司"!Define Version "1.0.0" !Define LocalMtExpertsDir "C:\Program Files (x86)\MetaTrader 4"!Define ROOT ".........\Release\"!Define RegUninstall "Software\Microsoft\Windows\CurrentVersion\Uninstall\${Product}" ;--------------------------------;Include Modern UI !include "MUI.nsh" ;--------------------------------;General ;Name and file Name "${NAME_JP}" OutFile "${Product}_${Version}_setup.exe" ;Default installation folder InstallDir "$PROGRAMFILES\${Company}\${Product}" ;Get installation folder from registry if available InstallDirRegKey HKCU "Software\${Company}\${Product}" "" ;--------------------------------;Variables Var MUI_TEMP Var STARTMENU_FOLDER Var MT_DIR Var MT_DIR_CTRL;--------------------------------;Interface Settings !define MUI_ABORTWARNING Function setChooseMtArea!insertmacro MUI_HEADER_TEXT "MetaTrader 4的文件夹" "请选择MetaTrader 4所在的文件夹。"!insertmacro MUI_INSTALLOPTIONS_WRITE "mt4dir.ini" "Field 2" "State" "$PROGRAMFILES\Metatrader 4"!insertmacro MUI_INSTALLOPTIONS_DISPLAY "mt4dir.ini"FunctionEnd Function setChooseMtAreaLeave!insertmacro MUI_INSTALLOPTIONS_READ $MT_DIR_CTRL "mt4dir.ini" "Field 2" "HWND"!insertmacro MUI_INSTALLOPTIONS_READ $MT_DIR "mt4dir.ini" "Field 2" "State"recheck:${If} $MT_DIR == "" MessageBox MB_OK "MetaTrader 4のフォルダーを選択してください。" Abort ${Else} IfFileExists $MT_DIR\experts\*.* 0 +2 goto skip MessageBox MB_OKCANCEL "所选文件夹中未找到MetaTrader 4。$\n需要为您安装MetaTrader 4吗?" IDCANCEL +6 SetOutPath "$TEMP" File "${ROOT}mt4setup.exe" ExecWait '"$TEMP\mt4setup.exe" ' Delete "$TEMP\mt4setup.exe" goto recheck Abortskip: ${EndIf} FunctionEnd ;--------------------------------;Pages !insertmacro MUI_PAGE_LICENSE "${ROOT}License.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY Page custom setChooseMtArea setChooseMtAreaLeave "" ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${Company}\${Product}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU ${Product} $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\${Product}.exe";Exec "$INSTDIR\${Product}.exe /regserver" !define MUI_FINISHPAGE_RUN_NOTCHECKED !insertmacro MUI_PAGE_FINISH;--------------------------------;Languages !insertmacro MUI_LANGUAGE "Japanese";!insertmacro MUI_LANGUAGE "English" RequestExecutionLevel admin ;--------------------------------;Installer SectionsSection ${NAME_JP} SecDummySetShellVarContext all ReadRegStr $4 HKEY_LOCAL_MACHINE \"Software\Microsoft\NET Framework Setup\NDP\v3.5" "SP" STRCMP $4 1 SKIP NOSKIP; Exec "$INSTDIR\${Product}.exe /regserver"; abort NOSKIP: MESSAGEBOX mb_ok "本产品需要Microsoft .NET Framework 3.5 SP1或以后的版本支持。"NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/0/6/1/061F001C-8752-4600-A198-53214C69B51F/dotnetfx35setup.exe" "$TEMP\dotNetFx35setup.exe" ExecWait '"$TEMP\dotNetFx35setup.exe" ';Delete "$TEMP\dotNetFx35setup.exe" SKIP: SetOutPath "$INSTDIR" File /oname=${Product}.exe "${ROOT}${Product}.exe" File "${ROOT}*.dll" File "${ROOT}${Product}.exe.config" File "${ROOT}XXX2.ico" File "${LocalMtExpertsDir}\experts\libraries\XXX.dll" File "${LocalMtExpertsDir}\experts\indicators\XXX.ex4" File "${LocalMtExpertsDir}\experts\scripts\XXX.ex4" SetOutPath "$INSTDIR\Sound" File "${ROOT}Sound\*.wav" SetOutPath "$INSTDIR\Help" File "${ROOT}Help\*.chm" SetOutPath "$MT_DIR" File "${LocalMtExpertsDir}\XXX.dll" File "${LocalMtExpertsDir}\Fann.Net.dll" File "${ROOT}fanndoubleMT.dll" File "${ROOT}System.Windows.Forms.DataVisualization.dll" SetOutPath "$MT_DIR\experts\indicators" File "${LocalMtExpertsDir}\experts\indicators\XXX.ex4" SetOutPath "$MT_DIR\experts\scripts" File "${LocalMtExpertsDir}\experts\scripts\XXX.ex4" SetOutPath "$MT_DIR\experts\libraries" File "${LocalMtExpertsDir}\experts\libraries\XXX.dll" ;Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" WriteRegStr HKLM "${RegUninstall}" "DisplayName" ${NAME_JP} WriteRegStr HKLM "${RegUninstall}" "UninstallString" "$INSTDIR\Uninstall.exe" WriteRegStr HKLM "${RegUninstall}" "HelpLink" "http://www.internal.co.jp/support/" WriteRegDWORD HKLM "${RegUninstall}" "NoModify" 1 WriteRegDWORD HKLM "${RegUninstall}" "NoRepair" 1 WriteRegStr HKLM "${RegUninstall}" "MtDir" "$MT_DIR" WriteRegStr HKLM "${RegUninstall}" "MainDir" "$INSTDIR" WriteRegStr HKCR ".xxx" "" "XXX.file" WriteRegStr HKCR "XXX.file" "" "XXXファイル (.xxx)" WriteRegStr HKCR "XXX.file\DefaultIcon" "" "$INSTDIR\XXX.ico" WriteRegStr HKCR "XXX.file\shell" "" "" WriteRegStr HKCR "XXX.file\shell\open" "" "" WriteRegStr HKCR "XXX.file\shell\open\command" "" '"$INSTDIR\${Product}.exe" "%1"' !insertmacro MUI_STARTMENU_WRITE_BEGIN ${Product} SetOutPath "$INSTDIR" CreateShortCut "$DESKTOP\${NAME_JP}.lnk" "$INSTDIR\${Product}.exe" CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${NAME_JP}.lnk" "$INSTDIR\${Product}.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\uninstall.lnk" "$INSTDIR\Uninstall.exe" !insertmacro MUI_STARTMENU_WRITE_END System::Call 'shell32.dll::SHChangeNotify(l, l, i, i) v (0x08000000, 0, 0, 0)' SectionEnd ;--------------------------------;Descriptions ;Language strings LangString DESC_SecDummy ${LANG_ENGLISH} "${NAME_JP} 执行程序。";LangString DESC_SecDummy ${LANG_ENGLISH} "This is ${NAME_JP}." ;Assign language strings to sections !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy) !insertmacro MUI_FUNCTION_DESCRIPTION_END ;--------------------------------;Uninstaller Section Section "Uninstall"SetShellVarContext all;ADD YOUR OWN FILES HERE.. ReadRegStr $MT_DIR HKLM "${RegUninstall}" "MtDir" Delete "$INSTDIR\Uninstall.exe" Delete "$INSTDIR\${Product}.exe" Delete "$INSTDIR\*.ico" Delete "$INSTDIR\*.config" Delete "$INSTDIR\*.dll" Delete "$INSTDIR\*.ini" Delete "$INSTDIR\*.log" Delete "$INSTDIR\*.wav" Delete "$INSTDIR\*.db" Delete "$INSTDIR\*.xxx" Delete "$INSTDIR\*.chm" Delete "$INSTDIR\Help\*.chm" Delete "$INSTDIR\Sound\*.wav" Delete "$INSTDIR\Models\*.xxx" Delete "$INSTDIR\Models\NetResults\*.xxx" Delete "$MT_DIR\experts\libraries\XXX.dll" Delete "$MT_DIR\experts\scripts\XXX.ex4" Delete "$MT_DIR\experts\indicators\XXX.ex4" Delete "$MT_DIR\XXXX.dll" Delete "$MT_DIR\Fann.Net.dll" Delete "$MT_DIR\fanndoubleMT.dll" Delete "$MT_DIR\System.Windows.Forms.DataVisualization.dll" !insertmacro MUI_STARTMENU_GETFOLDER ${Product} $MUI_TEMP Delete "$DESKTOP\${NAME_JP}.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\*.lnk" RMDir "$SMPROGRAMS\$MUI_TEMP" RMDir "$INSTDIR\Help" RMDir "$INSTDIR\Sound" RMDir "$INSTDIR\Models\NetResults" RMDir "$INSTDIR\Models" RMDir "$INSTDIR" DeleteRegKey HKCR ".xxx" DeleteRegKey HKCR "XXX.file" DeleteRegKey HKLM "${RegUninstall}" System::Call 'shell32.dll::SHChangeNotify(l, l, i, i) v (0x08000000, 0, 0, 0)'SectionEnd ;Function .onInstSuccess ;Exec "$INSTDIR\${Product}.exe /regserver";FunctionEnd Function .onInit !insertmacro MUI_INSTALLOPTIONS_EXTRACT "mt4dir.ini" ReadRegStr $0 HKLM "${RegUninstall}" "DisplayName" StrCmp $0 "" noabort3 MessageBox MB_OK "${NAME_JP}已经安装,请先卸载。";MessageBox MB_OK "${NAME_JP} has already been installed. Please uninstall the programm and restart the install procedure." Abort ; causes installer to quit. noabort3:FunctionEndFunction un.onInitPush $R0 CheckProc: Push "${Product}.exe" ProcessWork::existsprocess Pop $R0 IntCmp $R0 0 GetDir MessageBox MB_OKCANCEL|MB_ICONSTOP "${NAME_JP}正在运行。$\r$\n${NAME_JP}强制结束吗?" IDCANCEL abortPush "${Product}.exe"Processwork::KillProcess Sleep 1000 goto CheckProcabort: AbortGetDir: FunctionEndIcon "${ROOT}Setup.ico"UninstallIcon "${ROOT}Setup.ico"
这个过程中,加入了一个自定义的页面选择Metatrader所在的文件夹。除了上述代码外,还需要一个描述页面用的ini文件(通过NSIS图形工具制作)
; Ini file generated by the HM NIS Edit IO designer.[Settings]NumFields=3 [Field 1]Type=LabelText=Metatrader4的文件夹:Left=10Right=80Top=26Bottom=34 [Field 2]Type=DirRequestState=DirRequestLeft=80Right=270Top=22Bottom=36 [Field 3]Type=LabelText=本软件在Metatrader 4的基础上运行。请选择Metatrader 4所在的文件夹。Left=10Right=273Top=3Bottom=19
随后,可通过批处理文件对dll进行签名(未签名的dll可能被视为带威胁性软件),创建安装包
@echo on set version=1.0.0set pfxDir=c:\set nsisDir=C:\Program Files (x86)\NSIS\set signtoolDir=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\set dllRoot=.......\Release\set installerFolder=......\Installer\set releaseFolder=\\server\MySoft\ "%signtoolDir%signtool.exe" sign /du http://www.mycompany.com /t http://timestamp.verisign.com/scripts/timstamp.dll /f %pfxDir%mycredit.pfx /v %dllRoot%MySoft.exe "%signtoolDir%signtool.exe" sign /du http://www.mycompany.com /t http://timestamp.verisign.com/scripts/timstamp.dll /f %pfxDir%mycredit.pfx /v %dllRoot%XXX1.dll "%signtoolDir%signtool.exe" sign /du http://www.mycompany.com /t http://timestamp.verisign.com/scripts/timstamp.dll /f %pfxDir%mycredit.pfx /v %dllRoot%XXX2.dll "%nsis%makensis" %installerFolder%Setup.nsi copy "%installerFolder%MySoft_%version%_setup.exe" "%releaseFolder%" pause@echo off
双击执行,即可完成创建安装包,并上传至服务器。
转载于:https://www.cnblogs.com/lican/archive/2012/01/06/2315083.html
NSIS制作安装包实例相关推荐
- 使用NSIS制作安装包
使用NSIS制作安装包 (2018-01-08 14:25:12) 转载▼ 标签: nsis 分类: windows 这两天使用NSIS制作了一个程序安装包,这里记录一下过程. 开始参考博客:http ...
- 使用NSIS制作安装包(1)
NSIS是一个基于脚本语言的制作安装包的免费工具,它使用起来也很方便,下面是制作安装.NET框架和语言包的脚本. NSIS的编译器和脚本编辑工具可以到nsis.sf.net上下载 !include W ...
- [工具设置]使用NSIS制作安装包
https://www.cnblogs.com/modou/p/3573772.html nsis下载地址:http://www.pc6.com/softview/SoftView_14342.htm ...
- NSIS制作安装包软件
一.简介 NSIS 是"Nullsoft 脚本安装系统"(Nullsoft Scriptable Installation System) 的缩写,它是一个Open Source的 ...
- .Net Core WPF 制作安装包
注:由于项目中用到了x86 DLL,项目目标平台选择x86; 打包步骤: 1.修改项目配置管理器为 2.项目发布,配置改为如下: 如果nuget报错,可以试着改程序包源(工具--选项--NuGet包管 ...
- vs2005制作安装包(自动安装.net framework 2.0)(小寿原创)
vs2005制作安装包(自动安装.net framework 2.0)(小寿原创) 新建项目-> 其他项目类型->安装和部署->安装向导! 安装向导会提示你添加要安装的文件,这时你可 ...
- VS2008制作安装包
图文详细地址:http://www.itwis.com/html/net/kaifagongju/20090218/3387.html VS2008制作安装包 安装与部署 2010-03-13 14: ...
- Debian、Ubuntu源码编译制作安装包(二)
在<Debian.Ubuntu源码编译制作安装包(一)>文章中描述了dpkg基本制作安装包过程,本篇文章描述如何增加patch及解决出错问题. 章节预览: 5. 增加patch 6. 修改 ...
- Debian、Ubuntu源码编译制作安装包(一)
Debian.Ubuntu系列linux操作系统制作安装包相较于CentOS更简便一些,如"dpkg -b"指令即可重新打包.如果需要源码级制作安装包则更困难一些,接下来,我们逐步 ...
最新文章
- 这便是有三AI一年的底蕴,那些5000粉丝1000阅读量的AI技术干货
- 启明云端方案分享| ESP32-S2 摄像头 WIFI方案应用于智能猫眼
- 机器学习基础:分类vs回归
- false libhadoop was built without ISA-L support以及编译hadoop本地库失败(没有解决)
- activemq 发两条只收到一条_浅谈ActiveMQ与使用
- 国家中长期教育改革和发展规划纲要(2010-2020年)
- python爬虫入门
- 【转载】KG-知识图谱初探
- c语言数据结构与算法参考文献,数据结构论文参考文献
- 一文说清:可逆与不可逆加密算法,对称与非对称加密算法-据说BCrypt比MD5要好?
- java 碳架山地车寿命_关于自行车的4大“谣言” 铝合金车架寿命只有五年
- 电磁兼容设计中无法忽视的高频效应
- 2018年总结和职场规划
- css显示苹方字体,苹方字体合集
- AI随笔-python3(4)
- python中的argv和argc
- 鄢陵一高2021高考成绩查询单,鄢陵县第一高级中学2020年高考喜报
- 数据泄露是如何发生的?有哪些预防措施...
- vue3-admin商品管理后台项目(登录页开发和功能实现)
- 计算机网络——网络层功能概述
热门文章
- 2020-06-05 原始套接字/AF_PACKET链路层访问
- 开源GIS(二十)——CAD数据添加属性转GIS数据
- Nginx编译-安装-配置-优化实践总结
- Android杂谈--ListView之SimpleAdapter的使用
- 《高级着色语言HLSL入门》系列文章
- Window环境下使用C#调用VBScript、JavaScript等脚本
- PVE虚拟服务器配置,我与PVE的交往史 篇一:如何使用虚拟机PVE一步一步打造自己想要的ALL IN ONE 主机...
- Impala之DDL、DML
- jmeter分布式性能测试
- js深拷贝和浅拷贝对数组的影响_浅拷贝与深拷贝(JavaScript)