NSIS安装包制做软件的常用小技巧

NSIS安装包制做软件的常用小技巧

用NSIS软件制作安装包时总会用到那么几个常用的代码,正因为常用到,自己脑袋又不好记不住,所以就一一记录下来,时间一长自然也就成好多条了,贴出来与大家分享一下吧。
1.如何运行一个批处理文件 .bat
注:xiaojian.bat为你的文件名

ExecWait "xiaojian.bat"

不显示黑框框

  nsExec::Exec "xiaojian.bat"

2.如何运行一个VBS文件 .vbs
注:xiaojian.vbs为你的文件名

ExecWait '"$SYSDIR\cscript.exe" "xiaojian.vbs"'
不显示黑框框
nsExec::Exec '"$SYSDIR\cscript.exe" "xiaojian.vbs"'

3.如何运行一个注册表文件
注:xiaojian.reg为你的文件名

ExecWait "regedit.exe /s xiaojian.reg"接写入注册表
WriteRegStr
WriteRegExpandStr
WriteRegDWORD
WriteRegBin
比如:WriteRegDWORD HKCU "Software\ES-Computing\xiaojian\Install" "eula" '0x00000001"

请看NSIS详细说明
4.如何运行一个安装文件 .inf
注:xiaojian.inf 为你的文件名

ExecWait "RunDll32 advpack.dll,LaunchINFSection xiaojian.inf,DefaultInstall"

5.如何运行一个安装文件 .msi
注:xiaojian.msi为你的文件名

Execwait `msiexec /qn /i "xiaojian.msi"`

6.关联文件图标后,图标没变化。
刷新图标

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

7.安装窗体变窄了。

SetFont /LANG=2052 "tahoma" 8
XP特殊文件夹的位置:
HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
安装硬盘上的字体(代码插入Function,Section内):
StrCpy $0 "D:\Fonts\Chs\经典空趣体繁.ttf"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "经典空趣体繁(TrueType)" "$0"
System::Call "GDI32::AddFontResource(t) i ('$0') .s"
在经典模式下使用中文界面(代码插入文件头):
LoadLanguageFile "${NSISDIR}\Contrib\Language files\SimpChinese.nlf"
LangString Name 2052 "Simplified Chinese"

#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
;卸载程序之前
Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
  Abort
;运行批处理文件
ExecShell Open "$INSTDIR\rege\UnregUAC.bat" "" SW_HIDE
;ExecShell Open "sdbinst /u *.sdb" "" SW_HIDE
FunctionEnd
Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEnd
;安装结束后,运行批处理文件
Function .onInstSuccess
;ExecShell Open "$INSTDIR\rege\RegUAC.bat" "" SW_HIDE
;ExecShell Open "sdbinst /q *.sdb" "" SW_HIDE
;ExecWait "sdbinst /q *.sdb"
;ExecShell Open 'cmd' '/c "sdbinst /q *.sdb"' SW_HIDE
ExecShell Open 'cmd' '/k "sdbinst /q *.sdb"' SW_SHOWNORMAL
functionend
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 自定义页面结合组件选择安装 一个关于组件跟自定义页面的控制问题 如何把安装的卸载程序放到其他目录
一.环境变量配置 ; 定义系统环境变量的 注册表key值 !define WriteEnvStr_RegKey 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' ;设置环境变量 Function "regExpandStr" SetOverwrite ifnewer ;设置jdk环境变量 WriteRegExpandStr ${WriteEnvStr_RegKey} "JAVA_HOME" "$INSTDIR\jdk1.8.0_131" ;设置CATALINA_DIR WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_DIR" "$INSTDIR\tomcat\bin" ;设置CATA_LINA WriteRegExpandStr ${WriteEnvStr_RegKey} "CATA_LINA" "$INSTDIR\tomcat" ;设置path ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" "$0;C:\windows\system32;$INSTDIR\redis;$INSTDIR\mysql\bin;$INSTDIR\Java\jdk1.8.0_131\bin;" #第一次是使环境变量修改对其他进程有效;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SetOverwrite on functionend ;注册服务 Function "installService" detailprint "------------------------------------install tomcat Service..." Sleep 2000 SetOutPath "$INSTDIR\tomcat\bin" nsExec::Exec 'cmd /c service install' nsExec::Exec 'cmd /c sc config tomcat8 start= auto' ;设置服务自动开启 detailprint "------------------------------------install tomcat Service success..." detailprint "install mysql Service..." Sleep 2000 SetOutPath "$INSTDIR\mysql\bin" nsExec::Exec 'cmd /c $INSTDIR\mysql\bin\mysqld.exe" -install Mysql --defaults-file="$INSTDIR\\mysql\\my.ini' detailprint "install mysql Service success..." detailprint "------------------------------------install redis Service..." Sleep 2000 SetOutPath "$INSTDIR\redis" nsExec::Exec 'cmd /c redis-server --service-install redis.windows.conf' detailprint "install redis Service success..." functionend ; 启动服务 Function "startService" detailprint "------------------------------------start tomcat..." nsExec::Exec 'cmd /c sc start Tomcat8' detailprint "------------------------------------start tomcat success..." detailprint "------------------------------------start mysql..." nsExec::Exec 'cmd /c sc start mysql' detailprint "------------------------------------start MySQL success..." detailprint "------------------------------------start redis..." ;nsExec::Exec 'cmd /c sc redis-server --service-start --service-name redis' detailprint "------------------------------------start redis success..." functionend ;停止服务 Function "un.stopService" detailprint "正在停止tomcat服务......." nsExec::Exec 'cmd /c sc stop tomcat8' detailprint "停止tomcat服务成功......." detailprint "正在停止mysql服务......." nsExec::Exec 'cmd /c sc stop mysql' detailprint "停止mysql服务成功......." detailprint "正在停止redis服务......." nsExec::Exec 'cmd /c sc redis-server --service-stop --service-name redis' detailprint "停止redis服务成功......." functionend ;删除服务 Function "un.uninstService" detailprint "正在卸载tomcat服务......." nsExec::Exec 'cmd /c sc delete tomcat8' detailprint "卸载tomcat服务成功......." detailprint "正在卸载mysql服务......." nsExec::Exec 'cmd /c sc delete mysql' detailprint "卸载mysql服务成功......." detailprint "正在卸载redis服务......." nsExec::Exec 'cmd /c sc delete redis' detailprint "卸载redis服务成功......." functionend ;清空环境变量 Function "un.emptyRegExpandStr" #删除 系统环境变量JAVA_HOME 和 CATALINA_HOME #卸载的时候必须设置JAVA_HOME 和 CATALINA_HOME两个环境系统变量为空,或者删除这两个系统变量。否则会出现NSIS选择系统变量的错误(NSIS会自动选择之前有值的系统变量,而不是选择当前刚设置的系统变量) detailprint "正在删除相关环境变量......." functionend 二.校验mac地址 #序列号 校验页面 Page custom check_serial_number Var "MacAddress" Function check_serial_number Call .GetMacAddress #MessageBox MB_OK '当前机器Mac地址为:$MacAddress' ${if} $MacAddress == '00-50-56-C0-00-08' ${OrIf} $MacAddress == '00-50-56-C0-00-081' #MessageBox MB_OK '已授权' ${Else} MessageBox MB_OK '未授权,请联系经销商并授权!' ;SendMessage $HWNDPARENT 0x408 3 0 #页面跳转 Call onClickClose ${EndIf} FunctionEnd #获取主机MAC地址 Function .GetMacAddress System::Call Iphlpapi::GetAdaptersInfo(i,*i.r0) System::Alloc $0 Pop $1 System::Call Iphlpapi::GetAdaptersInfo(ir1r2,*ir0)i.r0 StrCmp $0 0 0 finish loop: StrCmp $2 0 finish System::Call '*$2(i.r2,i,&t260;.s,&t132;.s,i.r5)i.r0' ;Unicode版将t改为m IntOp $3 403 + $5 StrCpy $6 "" ${For} $4 404 $3 IntOp $7 $0 + $4 System::Call '*$7(&i1;.r7)' IntFmt $7 "X" $7 StrCpy $6 "$6$7" StrCmp $4 $3 +2 StrCpy $6 "$6-" ${Next} StrCpy $MacAddress $6 Goto loop finish: System::Free $1 FunctionEnd 三.关闭按钮功能 ;点击右上角关闭按钮 Function onClickClose FindProcDLL::FindProc "${PRODUCT_NAME}.exe" Sleep 500 Pop $R0 ${If} $R0 != 0 KillProcDLL::KillProc "${PRODUCT_NAME}.exe" ${EndIf} FunctionEnd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值