NSIS + QT 制作安装包的踩坑之旅

本次安装包的实现方式:NSIS + QT(DLL)
NSIS的功能:实现安装逻辑
DLL的功能:提供QT编写的界面给NSIS调用

首先遇到的一个问题:如何在DLL中如何显示QT编写的界面。暂时先不展开,后续有时间再补充,参考文章:
https://blog.csdn.net/shuishanga/article/details/52183159
http://blog.chinaunix.net/uid-13830775-id-212501.html

这里先记录下踩坑的事故现场:
1、动态库的接口参数用了std::string或者std::vector
NSIS + QT 制作安装包的踩坑之旅_第1张图片
参考文章:
https://blog.csdn.net/zj510/article/details/35290505
https://blog.csdn.net/chinabinlang/article/details/80496352
https://stackoverflow.com/questions/35310117/debug-assertion-failed-expression-acrt-first-block-header
解决方案:dll改成MDD/MD

2、跨线程操作界面控件导致:
NSIS + QT 制作安装包的踩坑之旅_第2张图片
NSIS中,解压文件开启了另外一个线程,但是文件解压的进度又需要发送给界面,此时调用界面操作的接口(该接口直接操作界面控件),会导致安装崩溃。
解决方案:
由于是QT,可采用发送信号的方式来改变进度条的值,不会导致崩溃。

3、在VNISEdit中修改脚本文件,保存时竟然提示:
NSIS + QT 制作安装包的踩坑之旅_第3张图片
解决方案:
1)、脚本文件用其他工具打开,改好后保存,再来编译
2)、根本原因是:makensis.exe还在运行,在任务管理器关掉就可以了!

4、编译的时候提示“Out of memory”,代码暂时也没看出什么内存溢出的问题
NSIS + QT 制作安装包的踩坑之旅_第4张图片
解决方案:
改用bat调用 makensisw.exe 来执行脚本,
bat的内容:“D:\Program Files (x86)\NSIS\makensisw.exe” %~dp0nsisInstall.nsi

5、待补充
6、待补充

你可能感兴趣的:(NSIS,nsis,qt,makensis,Out,of,memory,makensisw)