当前位置:   article > 正文

NSIS + QT 做安装卸载程序_qt 程序只做安装包和卸载包

qt 程序只做安装包和卸载包
NSIS + QT 做安装卸载程序。
NSIS仅仅用于把所有的东西封装为一个EXE。


NSIS打包
QT做有逼格的可视化界面,并且方便实现。



以下是nSIS源码:


icon ".\xxx.ico" #设置图标
OutFile "setup.exe" #设置生成程序
SilentInstall silent #静默安装不出现任何NSIS自带界面


Function .onInit #NSIS程序安装准备工作
InitPluginsDir #创建临时目录(内存)用于保存一些必要的库
SetOutPath $PLUGINSDIR #将文件保存在临时目录中
  File "Qt5Gui.dll" #我的安装界面必要的库
  File "Qt5Core.dll"
  File "Qt5Widgets.dll"
  File "Qt5Widgets.dll"
  File "qt.conf"
  File /r "plugins\"
  File "UnRAR.exe"
  File "xxx.rar" #rar.exe生成的必要的库和文件。
  File "xxx.exe"
FunctionEnd


Function .onInstSuccess #安装成功后调用
call fun
Functionend


Function fun
   ExecWait $PLUGINSDIR\class8_setup.exe #调用QT安装程序,等待其运行完后运行下一条语句
   RMDir $PLUGINSDIR                #释放临时目录(内存)
FunctionEnd


section
sectionend




出现图标不显示的问题的时候:
在开始里运行tskill ex*




QT做安装程序:
1.必要库的解压。
2.进度条
3.写注册表或配置文件。


这里直接调用第三方的UnRAR.exe程序。QT开一个进程调用它,并且绑定它的标准输出内容到主程序槽,用于设置进度条。
当该程序结束时会返回一个结束信号。


附:
rar unrar命令
rar -help
unrar -help

可以看到详细内容



按照上文的方法,即写两个EXE程序。一个发布的程序,一个是安装程序,安装程序用于解压发布的程序的压缩包。


以下是QT源码

  1. #ifndef ENV
  2. #define ENV
  3. #include <QDir>
  4. #include <QString>
  5. #include <QStringList>
  6. #include <QDebug>
  7. #include <windows.h>
  8. #include "psapi.h"
  9. #include "stdio.h"
  10. #include <tlhelp32.h>
  11. #include <QStandardPaths>
  12. #include <QByteArray>
  13. #include <QFile>
  14. #include <QCryptographicHash>
  15. namespace ENV{
  16. //define
  17. //创建文件夹
  18. static inline void createFolder(const QString &folderPath);
  19. //查找当前是否有该进程运行
  20. static inline bool findProcess(const QString &proName);
  21. //创建桌面快捷方式
  22. static inline bool createShortCutToDeskTop(const QString &file);
  23. //创建开始菜单快捷方式
  24. static inline bool createShortCutToStartMenue(const QString &file);
  25. //得到文件md5
  26. static inline QByteArray getFileMd5(QFile &file);
  27. static inline QByteArray getFileMd5(const QString &filePath);
  28. //对比文件md5
  29. static inline bool cmpFileMd5(QFile &lhs,QFile &rhs);
  30. static inline bool cmpFileMd5(const QString &lhs,const QString &rhs);
  31. //implementation
  32. void createFolder(const QString &folderPath){
  33. QDir dir;
  34. bool exist = dir.exists(folderPath);
  35. if(!exist){
  36. QStringList list = folderPath.split('/');
  37. QString filePath = "";
  38. int len = 0;
  39. if(QString(list.at(list.length()-1)).contains('.'))
  40. len = list.length()-1;
  41. else
  42. len = list.length();
  43. for(int i = 0;i < len;++i){
  44. filePath = filePath + list[i] + '/';
  45. exist = dir.exists(filePath);
  46. if(!exist)
  47. dir.mkdir(filePath);
  48. }
  49. }
  50. }
  51. static inline bool findProcess(const QString &proName)
  52. {
  53. int count = 0;
  54. PROCESSENTRY32 pe32;
  55. pe32.dwSize = sizeof(pe32);
  56. HANDLE hProcessSnap = ::Cr
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/112651
推荐阅读
相关标签
  

闽ICP备14008679号