1.环境
安装NSIS以及NIS edit,向导生成初步的nsi打包文件
2.个性化配置
1.安装包版本
将以下写入 !insertmacro MUI_LANGUAGE "SimpChinese" ,后面可以做exe 文件版本,2052中文 ID 是 2052(exe右键详细信息语言)。
VIProductVersion 1.0.0.1
VIAddVersionKey /LANG=2052 "ProductName" "bActiveX"
VIAddVersionKey /LANG=2052 "Comments" "ActiveX"
VIAddVersionKey /LANG=2052 "CompanyName" "ActiveX"
VIAddVersionKey /LANG=2052 "LegalTrademarks" "Test Application is a trademark of Fake company"
VIAddVersionKey /LANG=2052 "LegalCopyright" "ActiveX"
VIAddVersionKey /LANG=2052 "FileDescription" "ActiveX"
VIAddVersionKey /LANG=2052 "FileVersion" "1.0.0.1"
VIAddVersionKey ProductVersion "1.0.0.1" ;产品版本
2.注册于卸载ocx
RegDLL "$INSTDIR\xxxxxx.ocx" ;注册
UnRegDLL "$INSTDIR\xxxxxocx" ; 卸载
注册需要Section "MainSection" SEC01 段file加载文件完成的最后写入;
卸载在 Section Uninstall 一开始写入 先卸载再删除文件
3.安装检测ocx在使用或是否注册成功
检测是否在使用,需要加入 Function .onInit 事件,即安装前调用事件,注意事件需要加在 SectionEnd 之后
Function .onInit
; 先删除,在判断文件在不在 如果在占用 就一直存在,这个只能判断默认路径下是否使用,如果不想可以先检测卸载再安装;
Delete "$INSTDIR\HvActiveX.ocx"
IfFileExists $INSTDIR\HvActiveX.ocx 0 +3
MessageBox MB_ICONQUESTION|MB_OK "检测到浏览器控件在启动,请先关闭浏览器" IDYES +2
Abort
FunctionEnd
;检测是否注册成功,使用Function .onInstSuccess 安装完成事件
;定义注册表主键 注册表路径
!define HKEY_CLASSES_ROOT 0x80000000
!define HKEY_CURRENT_USER 0x80000001
!define HKEY_LOCAL_MACHINE 0x80000002
!define HKEY_USERS 0x80000003
;安装程序完成后后台运行
Function .onInstSuccess
; 为键的句柄创建一个缓存
System::Call "*(i 0) i .R0"
;将要检测的键放入内存中, 这个可以在注册成功后的电脑注册表上搜索 UUID 查到 路径 提取CLSID前一个路径:如 ACTIVEX.ActiveXCtrl.1\\CLSID 一般是工程下的ocx名称以及 工程内名称
Push "xxxxx.xxxx\\CLSID"
;调用API进行检查,返回值在$R1中
system::call 'Advapi32::RegOpenKey(i ${HKEY_CLASSES_ROOT}, t s, i R0) .iR1'
;关闭该键的句柄
system::call 'Advapi32::RegCloseKey(i R0)'
;释放内存
system::free
;返回值:
;0代表键存在
;2代表键不存在
;其它值表示出错
${If} $R1 == 0
;Messagebox mb_ok "Key Exists!"
${ElseIf} $R1 == 2
Messagebox mb_ok "注册失败"
${Else}
Messagebox mb_ok "注册失败"
${EndIf}
Pop $R1
Pop $R0
Quit
FunctionEnd