主程序名 web_transmit_adapter
Windows:
打包主目录windows:包含子目录web_transmit_adapter和两个打包文件web_transmit_adapter.nsi、和packing.bat
而在web_transmit_adapter子目录中包含了Qt程序web_transmit_adapter.exe以及一些依赖的第三方库文件等
发布Qt程序时,需要额外拷贝一些Qt库文件:
使用命令行可以拷贝需要依赖的Qt库文件,“C:\Qt\Qt5.5.1\5.5\msvc2010\bin\windeployqt.exe --release E:\CODES\yanrk\web_transmit_adapter\bin\windows\dll_release”
使用NSIS来做安装包,web_transmit_adapter.nsi内容如下:
; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "web_transmit_adapter"
!define PRODUCT_VERSION "2.0.16.824"
!define PRODUCT_PROTOCOL "RayvisionWeb"
!define PRODUCT_PUBLISHER "Shenzhen Rayvision Technology Co., Ltd."
!define PRODUCT_WEB_SITE "http://www.rayvision.com"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_STARTUP_KEY "Software\Microsoft\Windows\CurrentVersion\Run"
; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "x64.nsh"
!include "WordFunc.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
!define MUI_COMPONENTSPAGE ;元件页面
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN_TEXT "$(StartProgram)"
!define MUI_FINISHPAGE_RUN "$INSTDIR\web_transmit_adapter.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "English"
; Set name using the normal interface (Name command)
LangString Name ${LANG_ENGLISH} "English"
LangString Name ${LANG_SIMPCHINESE} "简体中文"
LangString Title ${LANG_ENGLISH} "web_transmit_adapter"
LangString Title ${LANG_SIMPCHINESE} "web_transmit_adapter"
LangString Language ${LANG_ENGLISH} "english"
LangString Language ${LANG_SIMPCHINESE} "chinese"
LangString RemoveTip ${LANG_ENGLISH} "Has been successfully removed from your computer."
LangString RemoveTip ${LANG_SIMPCHINESE} "已成功地从你的计算机移除。"
LangString RunName ${LANG_ENGLISH} "web_transmit_adapter"
LangString RunName ${LANG_SIMPCHINESE} "web_transmit_adapter"
LangString RunExe ${LANG_ENGLISH} "web_transmit_adapter.exe"
LangString RunExe ${LANG_SIMPCHINESE} "web_transmit_adapter.exe"
LangString AlreadyInstall ${LANG_ENGLISH} "You already have an version of client installed,"
LangString AlreadyInstall ${LANG_SIMPCHINESE} "检测到本机已经安装了${PRODUCT_NAME},"
LangString InstallInfo ${LANG_ENGLISH} "Do you want to uninstall it before setup?"
LangString InstallInfo ${LANG_SIMPCHINESE} "是否先卸载已安装的版本?"
LangString StartProgram ${LANG_ENGLISH} "Start $(Title)"
LangString StartProgram ${LANG_SIMPCHINESE} "运行 $(Title)"
; First is default
;LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
;LoadLanguageFile "${NSISDIR}\Contrib\Language files\SimpChinese.nlf"
; MUI end ------
;Name "${PRODUCT_NAME} ${PRODUCT_VERSION} $(Name)"
Name "$(Title) ${PRODUCT_VERSION} $(Name)"
OutFile "..\..\release\web_transmit_adapter_setup.exe"
;RequestExecutionLevel admin ; user 或者 admin ;注册表需要管理员权限
InstallDir ""
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
AllowRootDirInstall true
Var lang
Function .onInit
ReadRegStr $R0 HKLM ${PRODUCT_UNINST_KEY} "UninstallString"
StrCmp $R0 "" done
MessageBox MB_YESNOCANCEL|MB_ICONQUESTION "$(AlreadyInstall) $\n$\n $(InstallInfo)" \
/SD IDYES \
IDYES uninstall \
IDNO done
Abort
uninstall:
ClearErrors
ExecWait '$R0 _?=$INSTDIR'
;Exec $INSTDIR\uninst.exe
done:
${If} ${RunningX64}
StrCpy $InstDir "D:\Program Files (x86)"
${Else}
StrCpy $InstDir "D:\Program Files"
${EndIf}
Push Verdana
Push 9
;Language selection dialog
Push ""
Push ${LANG_ENGLISH}
Push English
Push ${LANG_SIMPCHINESE}
Push "Simplified Chinese"
Push A ; A means auto count languages
; for the auto count to work the first empty push (Push "") must remain
LangDLL::LangDialog "Installer Language" "Please select the language of the installer"
Pop $LANGUAGE
StrCmp $LANGUAGE "cancel" 0 +2
Abort
StrCmp $LANGUAGE ${LANG_SIMPCHINESE} 0 +2
Strcpy $lang "china"
Goto +2
StrCpy $lang "english"
FunctionEnd
Var len1
Var len2
Var leni
Var len
Var sun
Var len3
Var len4
!macro ExeEnd exestr
strlen $sun "${exestr}"
intop $len3 0 + 0
intop $len4 0 + 0
intop $len 0 + 0
intop $leni 0 + 0
strcmp $sun 0 +12 0 ;是否到了字符串的尾端!
IntOp $leni $leni + 1 ;截取字符的长度增加!
StrCpy $len1 "${exestr}" $leni $len3 ;截取字符,并保存与len1中
StrCpy $len2 "$len1" "" -1 ;取出Len1最后一个字符放入Len2中
Strcmp $len2 ";" 0 +9 ;判断Len2中的字符是不是";"如果是,表示这以经是一个进程名了!如果不是,刚跳过下面的宏,继续取!
StrCpy $len $len1 -1
FindProcDLL::FindProc "$len" ;查找进程是否存在!
StrCmp $R0 1 0 +2
KillProcDLL::KillProc "$len" ;杀掉进程,此处应注意,不是所有程序的进程都能杀掉,有些进程用这个方法无法结束!
intop $leni 0 + 0
strlen $