; 启用外部压缩工具(这里我们不用,原因看第 10 步)
;!define HAVE_UPX
;定义宏
!macro MyFunc UN
Function ${UN}MyFunc
Call ${UN}DoRegStuff
ReadRegStr $0 HKLM SoftwareMyProgram key
DetailPrint $0
FunctionEnd
; 若启用了外部压缩工具,这进行可执行文件头的压缩
!ifdef HAVE_UPX
; 用 UPX 压缩可执行文件头(用其他的相关工具也行)
!packhdr tmp.dat "E:UPXupx --best tmp.dat"
!endif
; 编译选项
; 设置覆盖标记
SetOverwrite on
; 设置压缩选项
SetCompress auto
; 选择压缩方式
SetCompressor bzip2
; 设置数据块优化
SetDatablockOptimize on
; 设置数据写入时间
SetDateSave on
; 相关数据预设
; 软件的名字,后面的${NAME}调用这个名字
!define NAME "NSIS"
!define NAME_FULL "全方位掌握 NSIS 的使用"
!verbose 3
; 包含窗口消息定义文件
!include "WinMessages.nsh"
; 包含新界面的宏指令文件
!include "MUI.nsh"
; 包含标牌位图宏指令文件
;!include "branding.nsh"
!verbose 4
!define CURRENTPAGE $9
!define TEMP1 $R0
!define TEMP2 $R1
; 插入安装界面宏定义(这里我禁用了,启用也没问题。编译照样通过。后面我都定义过了)
;!insertmacro MUI_INTERFACE "modern2.exe" "adni18-installer-C-no48xp.ico" "adni18-uninstall-C-no48xp.ico" "modern.bmp" "smooth"
; 安装程序设置
; 输出文件
OutFile "F:study.exe"
; 安装程序名称
Name "NSIS"
; 启用 WindowsXP 的视觉样式
XPStyle on
;设置字体
SetFont 宋体 9
; 标题名称
Caption "全方位掌握 NSIS 的使用"
; 标牌的内容
BrandingText /TRIMCENTER "Shao Hao"
; 安装程序图标
;Icon "F:12QCDIcon.ico"
; 安装程序显示标题
WindowIcon on
; 添加标牌位图(放在顶部用 TOP 参数。后面接高度)
AddBrandingImage LEFT 105
; 设定渐变背景
BGGradient off
; 设置安静安装模式
;SilentInstall normal
; 设置安静卸载模式
;SilentUnInstall normal
; 执行 CRC 检查(最好用 on 打开。关闭是因为还要修改安装程序,看第 10 步)
CRCCheck off
; 加载相应的语言文件
LoadLanguageFile "${NSISDIR}ContribLanguage filesSimpChinese.nlf"
; 替换各个对话框标题的文字
SubCaption 0 "授权协议"
SubCaption 1 "安装选项"
SubCaption 2 "安装目录"
SubCaption 3 "正在安装"
SubCaption 4 "完成安装"
; 替换默认按钮的文字
MiscButtonText "< 上一步" "下一步 >" "取消" "关闭"
; 替换“安装”按钮的文字
;InstallButtonText "安装"
; 替换当文件无法被写入时的警告窗的文字
FileErrorText "无法写入文件$r$n$0$r$n请确认文件属性不是只读且未被使用中!"
; 默认的安装目录
InstallDir "$PROGRAMFILESQCD 3"
; 如果可能的化从注册表中监测安装路径
InstallDirRegKey HKLM
"SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS"
"UninstallString"
; 授权协议页面
LicenseText "NSIS 是免费软件。安装前请先阅读以下协议条款" "我同意"
; 使用授权协议文本
;;LicenseData "F:12License.txt"
; 设置授权协议页面的背景色
;LicenseBkColor 000000
; 选择要按安装的组件
ComponentText "现在将安装 ${NAME_FULL}到您的计算机:" "请选择安装类型" "或选择您希望安装的组件"
InstType "完全安装(都在了)"
InstType "典型安装"
InstType /CUSTOMSTRING=自定义
;InstType /NOCUSTOM
;InstType /COMPONENTSONLYONCUSTOM
;;CheckBitmap "${NSISDIR}ContribIconsmodern.bmp"
; 替换显示磁盘空间信息的文字
SpaceTexts "所需空间:" "可用空间:"
; 提示用户输入目录的文本
; DirShow hide
; 替换显示选择安装目录的文字
DirText "请选择 ${NAME} 的安装路径:" "选择目录用以安装 ${NAME}:" "浏览..."
; 是否允许安装在根目录下
AllowRootDirInstall false
; 安装信息的颜色
;InstallColors 000000 FFFFFF
; 安装进度条显示方式
InstProgressFlags smooth colored
; 完成后自动关闭安装程序
AutoCloseWindow true
; 显示“显示详细细节”对话框
ShowInstDetails hide
; 替换“显示细节”按钮的文字
DetailsButtonText "显示细节"
; 替换“完成”按钮的文字
CompletedText "已完成"
; 卸载程序设置
; 替换卸载程序的文字
UninstallText "现在将从你的系统中卸载 ${NAME}:" "卸载目录:"
; 卸载程序图标
;UninstallIcon "F:12UnQCDIcon.ico"
; 替换卸载程序标题的文字
UninstallCaption "卸载 ${NAME}"
; 替换卸载程序每页按钮的文字
UninstallSubCaption 0 ":确认"
UninstallSubCaption 1 ":正在删除文件"
UninstallSubCaption 2 ":完成"
; 卸载程序显示方式
ShowUninstDetails hide
; 替换“卸载”按钮的文字
UninstallButtonText "卸载"
; 安装程序内容及其相关的回调函数
; 安装程序内容
Section /o "!主要程序(必须安装)" SecCore
SectionIn 1 2 RO
; 设置输出路径,每次使用都会改变
SetOutPath $INSTDIR
; 循环包含目录下全部内容
File /r "F:121*.*"
; 只包含一个文件
File "F:12gf.gif"
; 处理动态连接库文件
IfFileExists "$INSTDIR1.dll" 0 NoFile1
; 取消组件注册
UnRegDll "$INSTDIR1.dll"
Delete "$INSTDIR1.dll"
NoFile1:
File "F:121.dll"
; 注册组件
RegDLL "$INSTDIRQCDIconMgr.dll"
; 写入软件注册键值
WriteRegStr HKLM "SoftwareNSISNSIS" "" "$INSTDIR"
; 为 Windows 卸载程序写入键值
WriteRegStr HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS" "DisplayName" "NSIS(只用于移除)"
WriteRegStr HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS" "UninstallString" "$INSTDIRuninst.exe"
; 写入生成卸载程序(可多次使用)
WriteUninstaller "$INSTDIRuninst.exe"
SectionEnd
Section /o "扩展(可选)" SecUpdate
SectionIn 1
SetOutPath "$INSTDIRPlugins"
File "F:12qcdplusPlugins2.dll"
File /r "F:12qcdplusPlugins3"
SectionEnd
SubSection /o "选项" SecOptions
Section /o "创建桌面图标" SecDesktopShortCut
SectionIn 1 2
SetOutPath "$INSTDIRPlugins"
CreateShortCut "$DESKTOPNSIS.lnk" "$INSTDIRgf.gif"
WriteUninstaller "$INSTDIRuninst.exe"
SectionEnd
Section /o "创建快速启动栏图标" SecQuickbarShortCut
SectionIn 1 2
SetOutPath "$INSTDIRPlugins"
CreateShortCut "$QUICKLAUNCHNSIS.lnk" "$INSTDIRgf.gif"
WriteUninstaller "$INSTDIRuninst.exe"
SectionEnd
Section /o "创建 NSIS 程序组" SecShortCutGroup
SectionIn 1 2
SetOutPath "$INSTDIRPlugins"
CreateDirectory "$SMPROGRAMSNSIS"
CreateShortCut "$SMPROGRAMSQCD Playergf.lnk" "$INSTDIRgf.gif"
WriteUninstaller "$INSTDIRuninst.exe"
SectionEnd
SubSectionEnd
Section "-Run"; 运行
ExecWait "$INSTDIR2.exe" -p
WriteINIStr "$INSTDIRNSIS.ini" "2" "Language" "Chinese"
Exec "$INSTDIR2.exe"
ExecShell open "$INSTDIR汉化说明.htm"
SectionEnd
Section ""
;Invisible section to display the Finish header
!insertmacro MUI_FINISHHEADER SetHeader
SectionEnd
; 安装程序初始化设置
Function .onInit
; 发现有程序正在运行时提示退出后继续运行
loop:
FindWindow $R0 "NSIS"
IntCmp $R0 0 done
MessageBox MB_OKCANCEL
"NSIS 正在运行。$n点击“确定”按钮会关闭 NSIS 然后继续安装,点击“取消”按钮将退出安装程序"
IDOK NoAbort
Abort
NoAbort:
SendMessage $R0 1029 0 0
; 稍等后继续检测直至检测不到或用户选择取消
Sleep 444
Goto loop
done:
; 显示 Logo 画面
SetOutPath $TEMP
File /oname=qcd_logo.bmp "F:12logo.bmp"
File /oname=magiclime.exe "${NSISDIR}Binmagiclime.exe"
ExecWait "$TEMPmagiclime.exe" qcd_logo.bmp
Delete "$TEMPmagiclime.exe"
Delete "$TEMPqcd_logo.bmp"
; 初始化标牌位图
!insertmacro BI_INIT $R0
FunctionEnd
; 安装程序主界面的相关文本
Function SetHeader
!insertmacro MUI_HEADER_INIT
!insertmacro MUI_HEADER_START 1
!insertmacro MUI_HEADER_TEXT 2052 "授权协议" "安装 ${NAME} 之前,请认真阅读一下授权条款."
!insertmacro MUI_HEADER_STOP 1
!insertmacro MUI_HEADER_START 2
!insertmacro MUI_HEADER_TEXT 2052 "选择组件" "请选择你要安装的组件."
!insertmacro MUI_HEADER_STOP 2
!insertmacro MUI_HEADER_START 3
!insertmacro MUI_HEADER_TEXT 2052 "选择安装位置" "为 ${NAME} 选择一个安装目录."
!insertmacro MUI_HEADER_STOP 3
!insertmacro MUI_HEADER_START 4
!insertmacro MUI_HEADER_TEXT 2052 "安装" "${NAME} 已经安装,请等待."
!insertmacro MUI_HEADER_STOP 4
!insertmacro MUI_HEADER_START 5
!insertmacro MUI_HEADER_TEXT 2052 "完成" "安装顺利完成."
!insertmacro MUI_HEADER_STOP 5
!insertmacro MUI_HEADER_END
FunctionEnd
; 初始化安装程序对话框的显示文本
Function .onInitDialog
!insertmacro MUI_INNERDIALOG_INIT
!insertmacro MUI_INNERDIALOG_START 1
!insertmacro MUI_INNERDIALOG_TEXT 2052 1040 "如果你同意协议中的所有条款,选择“我同样”继续安装,如果你选择了“取消”,安装程序将终止,只有接受条款才能安装 ${NAME}."
!insertmacro MUI_INNERDIALOG_STOP 1
!insertmacro MUI_INNERDIALOG_START 2
!insertmacro MUI_INNERDIALOG_TEXT 2052 1042 "描述"
!insertmacro MUI_INNERDIALOG_TEXT 2052 1043 "移动你的鼠标到组件上,便可以见到相关的描述."
!insertmacro MUI_INNERDIALOG_STOP 2
!insertmacro MUI_INNERDIALOG_START 3
!insertmacro MUI_INNERDIALOG_TEXT 2052 1041 "目标文件夹"
!insertmacro MUI_INNERDIALOG_STOP 3
!insertmacro MUI_INNERDIALOG_END
FunctionEnd
; 转到下页面时的处理
Function .onNextPage
!insertmacro MUI_NEXTPAGE_OUTER
!insertmacro MUI_NEXTPAGE SetHeader
; 标牌位图设置
!insertmacro BI_NEXT
FunctionEnd
; 转到上一页面时的处理
Function .onPrevPage
!insertmacro MUI_PREVPAGE
; 标牌位图设置
!insertmacro BI_PREV
FunctionEnd
; 鼠标移到指定组件时的显示处理
Function .&#111nMouseOverSection
; 用宏指令设置安装自己的注释文本
!insertmacro MUI_DESCRIPTION_INIT
!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecCore} "安装主应用程序"
!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecUpdate} "安装 NSIS 的更新或新增插件"
!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecOptions} "选择 NSIS 的其他安装选项,例如:创建快捷方式和应用程序组的"
!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecDesktopShortCut} "在用户的桌面上创建 NSIS 的快捷方式"
!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecQuickbarShortCut} "在用户的快速栏里创建 NSIS 快捷方式"
!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecShortCutGroup} "在用户的开始菜单的程序中创建 NSIS 的快捷方式组"
!insertmacro MUI_DESCRIPTION_END
FunctionEnd
; 安装成功完成后的设置
Function .onInstSuccess
; 自己加吧:)
FunctionEnd
; 放弃安装时警告窗口的显示信息
Function .onUserAbort
!insertmacro MUI_ABORTWARNING 2052 "你确定要推出 ${NAME} 的安装吗?"
!insertmacro MUI_ABORTWARNING_END
FunctionEnd
; 安装程序标牌位图列表
!insertmacro BI_LIST
!insertmacro BI_LIST_ADD "F:12Brand1.bmp" /RESIZETOFIT
!insertmacro BI_LIST_ADD "F:12Brand2.bmp" /RESIZETOFIT
!insertmacro BI_LIST_ADD "F:12Brand3.bmp" /RESIZETOFIT
!insertmacro BI_LIST_END
; 卸载程序及其相关回调函数
; 卸载程序内容
Section "Uninstall"
ExecWait "$INSTDIR12.exe" /un
; 循环删除文件直至删除文件夹
RMDir /r "$SMPROGRAMSNSIS"
UnRegDLL "$INSTDIR2.dll"
Delete "$INSTDIRQCDIconMgr.dll"
Delete "$INSTDIR*.*"
DeleteRegKey HKLM "SoftwareNSIS"
DeleteRegKey HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS"
MessageBox MB_YESNO|MB_ICONQUESTION
"是否连插件目录也要删除?$n(若您要保留这些文件,请点击下面的“否”按钮)"
IDNO NoDelete
; 全删光!!!
RMDir /r "$INSTDIR"
NoDelete:
SectionEnd
; 定义卸载程序标牌位图
!define BI_UNINSTALL
!include "${NSISDIR}Examplesbranding.nsh"
; 初始化卸载程序对话框的设置
Function un.onInit
; 初始化标牌位图
!insertmacro BI_INIT $R0
FunctionEnd
; 卸载程序主界面的相关文本
Function un.SetHeader
!insertmacro MUI_HEADER_INIT
!insertmacro MUI_HEADER_START 1
!insertmacro MUI_HEADER_TEXT 2052 "卸载 ${NAME}" "${NAME_FULL} 将从你的系统里移除."
!insertmacro MUI_HEADER_STOP 1
!insertmacro MUI_HEADER_START 2
!insertmacro MUI_HEADER_TEXT 2052 "卸载" "${NAME} 正在被卸载,请等待."
!insertmacro MUI_HEADER_STOP 2
!insertmacro MUI_HEADER_START 3
!insertmacro MUI_HEADER_TEXT 2052 "完成" "${NAME_FULL} 已从你的系统中移除."
!insertmacro MUI_HEADER_STOP 3
!insertmacro MUI_HEADER_END
FunctionEnd
; 初始化卸载程序对话框时的处理
Function un.onInitDialog
; 自己加:)
FunctionEnd
; 卸载程序转到下一页时的处理
Function un.onNextPage
!insertmacro MUI_NEXTPAGE_OUTER
!insertmacro MUI_NEXTPAGE un.SetHeader
; 标牌位图设置
!insertmacro BI_NEXT
FunctionEnd
; 卸载程序完成时的处理
Function un.onUninstSuccess
; 再加^_^
FunctionEnd
; 放弃卸载程序时的处理
Function un.onUserAbort
FunctionEnd
; 卸载程序标牌位图列表
!insertmacro BI_LIST
!insertmacro BI_LIST_ADD "F:12UnBrand1.bmp" /RESIZETOFIT
!insertmacro BI_LIST_ADD "F:12UnBrand2.bmp" /RESIZETOFIT
!insertmacro BI_LIST_END
THE END
暂无评论内容