nsis
nsis download:https://www.filehorse.com/download-nsis/
和nsis打包工具类似的还有inno setup,不过nsis功能更强大,innosetup更方便调试
脚本
nsis脚本*.nsi
Name HealthSystem
OutFile "HealthSystem.exe"
InstallDir $PROGRAMFILES64\HealthSystem
RequestExecutionLevel admin
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
!define PRODUCT_INSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Install\HealthSystem"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\HealthSystem"
InstallDirRegKey HKLM "${PRODUCT_INSTALL_KEY}" "HealthSystem"
unction .onInit
ClearErrors
ExecShellWait "net stop mysql && sc delete mysql" SW_HIDE #ExecWait执行可以看到控制台
RMDir /r $INSTDIR
Delete $DESKTOP\HealthSystem.lnk
FunctionEnd
Section #生成控制面板信息
WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "HealthSystem"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "1.0"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "Test"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\UIEngineMonitor.ico"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe"
WriteUninstaller $INSTDIR\Uninstall.exe #调用uninstall section生成unistall.exe
SectionEnd
Section Mysql #拷贝mysql安装部署
SetOutPath $PROGRAMFILES64\mysql
SetOverwrite on
File /r /x *.pdb /x *.lib .\mysql-8.0.28-winx64\*
SetOutPath $PROGRAMFILES64\dotnet #可以设置多个输出,注释使用#符号
SetOverwrite on
File /r /x *.pdb /x *.lib .\dotnet
ClearErrors
FileOpen $0 $PROGRAMFILES64\mysql\my.ini w
FileSeek $0 0 END
IfErrors done
FileWrite $0 "[client]$\r$\ndefault-character-set=utf8$\r$\n[mysqld]$\r$\nport=3306$\r$\n"
FileWrite $0 "basedir=$\"$PROGRAMFILES64/mysql$\"$\r$\n"
FileWrite $0 "datadir=$\"$PROGRAMFILES64/mysql/data$\"$\r$\n"
FileWrite $0 "character-set-server=utf8$\r$\ndefault-storage-engine=INNODB$\r$\nmax_connections=200$\r$\n"
FileClose $0
done:
ExecWait "cmd /c cd /d $PROGRAMFILES64\mysql\bin && mysqld.exe --install && sc config mysql start=delayed-auto && net start mysql"
SectionEnd
Section Uninstall #必须调用WriteUninstaller生成exe
ClearErrors
nsExec::Exec "cmd /c sc delete mysql"
RMDir /r $INSTDIR
RMDir /r $PROGRAMFILES64\mysql
Delete $DESKTOP\HealthSystem.lnk
SectionEnd
- section,在component页面中作为选项,可以单独选中设置
- function,执行函数
安装nsis后,选择文件右键可以运行nsi脚本,修改文件后,重新加载即可自动运行脚本
执行等待
ExecWait "$INSTDIR\nsis.bat" //可以等待,不可以隐藏窗口
nsExec::Exec "$INSTDIR\nsis.bat" //可以等待,可以隐藏窗口
ExecShell Open "$INSTDIR\nsis.bat" "" SW_HIDE // 不可以等待,可以隐藏窗口
ExecCmd::exec "$INSTDIR\nsis.bat" // 不可以等待 ,可以隐藏窗口