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
Abort
skip:
${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 Sections
Section ${NAME_JP} SecDummy
SetShellVarContext 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:
FunctionEnd
Function un.onInit
Push $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 abort
Push "${Product}.exe"
Processwork::KillProcess
Sleep 1000
goto CheckProc
abort:
Abort
GetDir:
FunctionEnd
Icon "${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=Label
Text=Metatrader4的文件夹:
Left=10
Right=80
Top=26
Bottom=34

[Field 2]
Type=DirRequest
State=DirRequest
Left=80
Right=270
Top=22
Bottom=36

[Field 3]
Type=Label
Text=本软件在Metatrader 4的基础上运行。请选择Metatrader 4所在的文件夹。
Left=10
Right=273
Top=3
Bottom=19

随后,可通过批处理文件对dll进行签名(未签名的dll可能被视为带威胁性软件),创建安装包

@echo on

set version=1.0.0
set 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 System 插件 NSIS VPatch 3.1插件 NSIS InstallOptions 2 插件 NSIS Modern UI(新式用户界面)插件 NSIS的Modern UI插件 NSIS里特殊符号的表达方法 两组件互斥 NSIS 常用小问题合集 资源替换式的美化包制作方式代码 安装完毕后如何刷新文件关联 教你如何编程调用 NSIS 的插件 NSIS安装程序概要 实现 NSIS 自定义页面中的控件操作代码 如何使用NSIS实现多目录安装设置 如何用NSIS在加入注册表 用NSIS 制作自己的安装程序 bluewind 的 wmp9 nsis安装脚本 NSIS安装脚本简明教程 取得winamp的NSIS脚本的教程 迅雷5.7.3.389 AYU增强版的安装脚本 NSIS制作迅雷安装的脚本 迅雷5.7.2.371 DDR1.5版去广告版源代码说明 NSIS删除安装程序自身 帮助文件中关于静默安装的说明 NSIS实现静默安装的两种方法 nsis的附加任务代码 关于 NSIS 写入注册表的问题 少轻狂制作的Windows优化大师的安装脚本 aipc编写的nsis极点安装脚本 官方 NSIS 插件全集 全方位掌握NSIS的使用 NSIS语言里怎样安装一个.inf文件? 如果要关联某个文件给程序应该怎么做? 如何避免显示解压缩进度框? 关于检测操作系统的问题 在结束页面添加运行程序选项 NSIS的botton二选一如何实现? NSIS灵活应用用逻辑库 NSIS调用inf安装驱动后的卸载问题 NSIS的组件互斥代码 在NSIS中如何禁止一个组件组的父项的点击事件 关于打破 NSIS 的 8192 字节限制的更简单方法 NSIS 自定义页面结合组件选择安装 一个关于组件跟自定义页面的控制问题 如何把安装的卸载程序放到其他目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值