Qt软件发布问题记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhango5/article/details/78537129

    最近在Win7 + Qt 5.5.1 + vs2012环境下软件开发,开发好的软件编译release版本,用之前写过的一篇帖子 《Qt程序发布》方式将所需要的动态库拷贝到一起,nsis脚本打包成exe安装程序,以为一切ok。当然在自己的机子上运行是没有问题的,可是换到别的电脑上,可能就要报错了。

    1. 缺少 msvcr110.dll msvcp110.dll

    众所周知,这两个是Visual Studio 2012的一个动态链接库,用VS2012开发的程序都需要这两个动态库,这个也是很好解决的,在电脑上找到它们,打包到一起就可以了。

    2.应用程序无法正常启动0xc000007b

    网上推荐的方法是安装DirectX 9.0c,但是安装后还是不行?经过多次验证,发现安装vcredist_x86.exe可以解决这个问题。于是将这个exe打包到安装程序中,在脚本中检查是否已安装,如果没有安装则随安装程序运行时一起安装。


nsis脚本代码:


;检查VC运行环境
Section VC_Runtime
  ;检查是否安装vcredist_x86
  Call InstallVC
SectionEnd

;安装VC运行环境
Function InstallVC
Push $R0
   ClearErrors
   ReadRegStr $R0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{a55ac379-46b0-461a-95b1-fef5c08443f2}" "Version"

   ; 检测含有vc的注册表信息是否存在
   IfErrors 0 VSRedistInstalled
   ExecWait "$INSTDIR\vcredist_x86.exe /q"   ;若不存在,执行静默安装
   Delete "$INSTDIR\vcredist_x86.exe"        ;删除文件

VSRedistInstalled:
   Exch $R0
   Delete "$INSTDIR\vcredist_x86.exe"        ;删除文件
FunctionEnd



脚本中使用ReadRegStr检查HKLM(HKEY_LOCAL_MACHINE)中指定路径下{a55ac379-46b0-461a-95b1-fef5c08443f2}项的Version字段,如果存在即表示已安装,否则执行安装。

vcredist_x86.exe在注册表中的项名称应该是固定的{a55ac379-46b0-461a-95b1-fef5c08443f2}。

之前也使用过ReadRegDWORD,但这个方法每次读出的结果都是失败的,导致结果有误,故后来换成ReadRegStr。








猜你喜欢

转载自blog.csdn.net/zhango5/article/details/78537129
今日推荐