赞
踩
windeployqt LedStripEditor.exe
命令执行完成以后,在刚才所创建的目录中就会看到添加进来的qt依赖库dll文件,以及其他配置文件。这些文件就是将来打包到安装包内的文件。执行完命令的结果如下图所示。
2. 准备图标
需要的图标包括软件图标和卸载图标。图标格式要求为ico格式,建议使用“Sib Icon Studio”这个软件来生成Ico格式的图标。
注意:如果在执行“windeployqt”命令的时候提示找不到此命令的处理方式如下:
原因是你的这个命令所在的位置没有添加到“系统环境变量”里面,导致命令行查找不到此命令。
处理办法是,找到这个命令所在的位置添加到环境变量里面,操作步骤如下。
在你的Qt安装路径中找到此命令,我的路径如下:
C:\Qt-MSVC\Qt5.12.3\5.12.3\msvc2017\bin
在文件管理器的“计算机”点右键“属性”,然后出现下图所示窗口,按图中步骤操作,即可。
选择path后,点击编辑按钮,在变量末尾加入,之前找到的命令所在路径(注意在先加分号),如下图所示:
设置完成之后,点击“确定”依次关闭打开的窗口,这时候新开一个cmd窗口,再执行“windeployqt”就可以正常使用了。
如果是一般的qt应用程序,经过“windeployqt”导入qt的依赖库之后,双击应用程序,程序应该是可以正确运行起来的,但是当你的使用了第三方库的时候,则会出现如下错误对话框,如下图所示:
因此需要你找到所缺第三方库文件dll,然后复制到“应用程序”所在的目录即可。本文的测试环境是缺乏ffmpeg的dll库。如下图所示:
当然如果你一开始就是在windows下编写的qt程序,那么你在调试的时候,就会出现此问题,而不是在最终打包的时候出现。我这里是由于一开始在macOS下开发,最终在windows下发布windows版本遇到的问题。
# ====================== 自定义宏 ============================== !define PRODUCT_NAME "软件名字" !define EXE_NAME "LedStripEditor.exe" !define PRODUCT_VERSION "1.0.1.0" !define PRODUCT_PUBLISHER "公司名字" !define PRODUCT_LEGAL "公司英文缩写 2019" !define TEMP_DIR "" !define PUBLISHER_SHORT_NAME "公司英文缩写" !define PRODUCT_ENGLISH_NAME "LedStripEditor" # ===================== 外部插件以及宏 ============================= !include "MUI2.nsh" # ===================== 安装包版本 ============================= VIProductVersion "${PRODUCT_VERSION}" VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}" VIAddVersionKey "ProductName" "${PRODUCT_NAME}" VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}" VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}" VIAddVersionKey "InternalName" "${EXE_NAME}" VIAddVersionKey "FileDescription" "${PRODUCT_NAME}" VIAddVersionKey "LegalCopyright" "${PRODUCT_LEGAL}" # ==================== NSIS属性 ================================ # ZLIB(默认) BZIP2 LZMA SetCompressor lzma ; 安装包名字. Name "${PRODUCT_NAME}" # 安装程序文件名. OutFile "生成的安装包文件名字.exe" # 默认安装位置. InstallDir "$PROGRAMFILES\${PUBLISHER_SHORT_NAME}\${PRODUCT_ENGLISH_NAME}" # 设置是否显示安装详细信息。 ShowInstDetails hide # 设置是否显示卸载详细信息 ShowUnInstDetails hide # 针对Vista和win7 的UAC进行权限请求. # RequestExecutionLevel none|user|highest|admin RequestExecutionLevel admin # ==================== MUI属性 ================================== # 安装和卸载程序图标 !define MUI_ICON "image\logo.ico" !define MUI_UNICON "image\un_logo.ico" # 如果未使用MUI,则可直接使用.onGUIInit !define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit # 安装程序欢迎页面 !insertmacro MUI_PAGE_WELCOME # 安装程序软件授权申明页面 #!insertmacro MUI_PAGE_LICENSE "license.rtf" # 安装程序显示安装目录选择页面 !insertmacro MUI_PAGE_DIRECTORY # 安装程序显示安装组件选择页面 !insertmacro MUI_PAGE_COMPONENTS # 安装程序显示进度页面 !insertmacro MUI_PAGE_INSTFILES # 安装程序显示安装结束页面 !insertmacro MUI_PAGE_FINISH # 卸载程序显示进度 !insertmacro MUI_UNPAGE_INSTFILES # 卸载程序显示安装结束 !insertmacro MUI_UNPAGE_FINISH # 指定语言,必须在最后指定 !insertmacro MUI_LANGUAGE "SimpChinese" # ========================= 安装步骤 =============================== # 区段1 # 区段名以一个 ! 开头,那么该区段的显示名称将以粗体字显示. Section "!Files" "des_files" ; 设置文件的输出路径 SetOutPath $INSTDIR ; 放置文件 File /r "app\*.*" SectionEnd # 区段2 Section "Shortcut" "des_shortcut" SetShellVarContext all CreateDirectory "$SMPROGRAMS\${PRODUCT_PUBLISHER}" CreateShortCut "$SMPROGRAMS\${PRODUCT_PUBLISHER}\${PRODUCT_NAME}.lnk" "$INSTDIR\${EXE_NAME}" CreateShortCut "$SMPROGRAMS\${PRODUCT_PUBLISHER}\卸载${PRODUCT_NAME}.lnk" "$INSTDIR\uninst.exe" CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${EXE_NAME}" SetShellVarContext current SectionEnd # 区段3 # 区段名为空、遗漏或者以一个 "-" 开头,那么它将是一个隐藏的区段,用户也不能选择禁止它. Section "-Necessary" # 生成卸载程序 WriteUninstaller "$INSTDIR\uninst.exe" # 添加卸载信息到控制面板 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayName" "${PRODUCT_NAME}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayIcon" "$INSTDIR\${EXE_NAME}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "Publisher" "$INSTDIR\${PRODUCT_PUBLISHER}" SectionEnd # 卸载区段 Section "Uninstall" ; 删除快捷方式 SetShellVarContext all Delete "$SMPROGRAMS\${PRODUCT_PUBLISHER}\${PRODUCT_NAME}.lnk" Delete "$SMPROGRAMS\${PRODUCT_PUBLISHER}\卸载${PRODUCT_NAME}.lnk" RMDir "$SMPROGRAMS\${PRODUCT_PUBLISHER}\" Delete "$DESKTOP\${PRODUCT_NAME}.lnk" SetShellVarContext current SetOutPath "$INSTDIR" ; 删除安装的文件 Delete "$INSTDIR\*.*" SetOutPath "$DESKTOP" RMDir /r "$INSTDIR" RMDir "$INSTDIR" SetAutoClose true SectionEnd # 区段描述 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${des_files} "主程序文件" !insertmacro MUI_DESCRIPTION_TEXT ${des_shortcut} "创建开始菜单和桌面快捷方式" !insertmacro MUI_FUNCTION_DESCRIPTION_END # ============================== 回调函数 ==================================== # 函数名以“.”开头的一般作为回调函数保留. # 函数名以“un.”开头的函数将会被创建在卸载程序里,因此,普通安装区段和函数不能调用卸载函数,而卸载区段和卸载函数也不能调用普通函数。 Function .onInit FunctionEnd Function onGUIInit FunctionEnd # 安装成功以后. Function .onInstSuccess FunctionEnd # 卸载操作开始前. Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO "你确实要完全删除${PRODUCT_NAME},及其所有组件吗?" /SD IDYES IDYES +2 IDNO +1 Abort FunctionEnd # 卸载成功以后. Function un.onUninstSuccess MessageBox MB_ICONINFORMATION|MB_OK "${PRODUCT_NAME} 已成功地从你的计算机移除" /SD IDOK FunctionEnd
把准备好的可执行软件放置到名字为“app”的目录下,把准备好的软件图标和卸载图标放置到名字为“”的目录下,然后把安装包的NSIS脚本文件与之前的两个目录放置到同一目录下,如下图所示:
然后选中脚本文件,右键选择“Compile NSIS Script”,就会自动弹出NSIS的打包进度对话框,如下图所示:
打包完会在脚本所在的目录生成“软件的安装包”,双击安装包,运行如下图所示:
安装包安装软件效果如下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。