禁默安装运行软件所需的运行环境(Vc_redist, bonjoursdk)

思路:

一般运行环境都支持禁默,软件包安装后会写入注册表。检测注册表是否有相关的环境注册表项,如果没有安装,存在略过。

查找运行环境版本号对应的注册表项

找到运行环境安装包的版本号项,一般位于注册表中"HKLM\SOFTWARE\WOW6432Node"中,可以安装后通过版本号查询得到该注册表项,也可以使用工具对比安装前后的区别得到该注册表项。例如:vc_redist位于

SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall

Bonjoursdk 位于SOFTWARE\WOW6432Node\Apple Inc.\Bonjour中

由于依赖运行环境千差万别,下面将详细描述一般性的方法。下面以bonjoursdksetup.x64_3.0.0.10.exe 作为例子进行说明。

使用 Regshot建立快照A->全部注册表

Regshot下载地址

http://dx.198424.com/soft1/regshot.zip

手动安装运行环境,默认下一步即可

使用 regshot 建立快照B

根据对比文件,运行regedit找到安装运行环境的版本号对应的项目

最后再删除安装的运行环境,验证其正确性。

编写安装运行环境的NSIS脚本

NSIS 安装环境依赖的脚本

环境安装包解压到临时文件夹,检测安装包是否已经安装,如果没有使用禁默安装,代码如下:

!macro InstallExeDepand RegKey SubRegKey DepandExeName ArgFile /oname=$PLUGINSDIR\${DepandExeName} ".\depands\${DepandExeName}"Push $R0ClearErrors;这里检测 该版本的运行时版本号是否存在ReadRegStr $R0 HKLM "${RegKey}" "${SubRegKey}"; IfErrors 0 +2; Exec "$PLUGINSDIR\${VcRedistName} /q"   ;若不存在,执行静默安装ExecWait "$PLUGINSDIR\${DepandExeName} ${Arg}"   ; 调试安装StrCpy $R0 "-1";MessageBox MB_OK  "安装完毕"pop $R0!macroend

注意此脚本必须在模板《vimeo-template.nsi》中修改,否则每次修改完成后会新生成的脚本被覆盖。

安装依赖运行环境增加安装进度

注意安装运行环境的进度假定为7%

修改NSIS脚本模板 vimeo-template.nsi

# 安装环境依赖
Function InstallDepands
#!define REGVCPARENTPATH "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
!define REGVCPARENTPATH "SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"#Var /GLOBAL vcParentKey#StrCpy $vcParentKey # 安装vc runtime /q 安静模式# 注意调用 发送进度不能超过 7%!insertmacro InstallExeDepand "${REGVCPARENTPATH}{95ac1cfa-f4fb-4d1b-8912-7f9d5fbb140d}" "BundleVersion" "vc_redist.x64_2017.14.15.26706_95ac1.exe" "/q"${UI_PLUGIN_NAME}::SetInstallStepDescription "Install : vc_redist.x64_2017.14.15.26706_95ac1.exe" 1.11!insertmacro InstallExeDepand "${REGVCPARENTPATH}{7e9fae12-5bbf-47fb-b944-09c49e75c061}" "BundleVersion" "vc_redist.x86_2017.14.15.26706_7e9fa.exe" "/q"${UI_PLUGIN_NAME}::SetInstallStepDescription "Install : vc_redist.x86_2017.14.15.26706_7e9fa.exe" 2.22!insertmacro InstallExeDepand "${REGVCPARENTPATH}{c342d939-0a78-4259-be5b-11e4860e8bb7}" "BundleVersion" "vc_redist_x64_2013.12.0.40660_c342d.exe" "/q"${UI_PLUGIN_NAME}::SetInstallStepDescription "Install : vc_redist_x64_2013.12.0.40660_c342d.exe" 3.33!insertmacro InstallExeDepand "${REGVCPARENTPATH}{48e8f45a-c463-4b50-9c55-e7e638ec02ca}" "BundleVersion" "vc_redist_x86_2013.12.0.40660_48e8f.exe" "/q"${UI_PLUGIN_NAME}::SetInstallStepDescription "Install : vc_redist_x86_2013.12.0.40660_48e8f.exe" 4.44# 安装 bonjour /quiet 安静模式!insertmacro InstallExeDepand "SOFTWARE\WOW6432Node\Apple Inc.\Bonjour" "Version" "bonjoursdksetup.x64_3.0.0.10.exe" "/quiet"${UI_PLUGIN_NAME}::SetInstallStepDescription "Install : bonjoursdksetup.x64_3.0.0.10.exe" 5.55FunctionEnd

修改NsisScriptGenerate.py

安装进度是NsisScriptGenerate.py生成,所以必须修改此脚本。

修改后的代码NsisScriptGenerate如下:

def do_main(nsis_script_template_path):global g_root_dirglobal g_extract_file_cmd_totalglobal g_cur_script_indexif g_root_dir[len(g_root_dir) - 1] == '\\':g_root_dir = g_root_dir[:len(g_root_dir) - 1]nsis_cmd_num_statistics(g_root_dir)print ("file total: " + str(g_extract_file_cmd_total) + ", dir total: " + str(g_create_dir_cmd_total))# 为了安装环境依赖显示进度条 使用下面规则,令环境依赖为总进度的7%# 推算出总共文件的数量和依赖环境后进度的数量 g_cur_script_index oldtotal = g_extract_file_cmd_totalg_extract_file_cmd_total = round(g_extract_file_cmd_total*100/(100-7));g_cur_script_index = g_extract_file_cmd_total - oldtotal;print ("calc file total: " + str(g_extract_file_cmd_total) + ", dir total: " + str(g_create_dir_cmd_total))generate_nsis_script(g_root_dir)g_insert_nsis_script_list.append('    ${UI_PLUGIN_NAME}::SetInstallStepDescription "Finished" 100')f = open(nsis_script_template_path, "r", encoding='UTF-8')all_nsis_script_lines = []cur_line_index = -1insert_line_index = -1for s in f.readlines():all_nsis_script_lines.append(s)cur_line_index += 1if s.find('Function ___ExtractFiles') != -1:insert_line_index = cur_line_index + 3f.close()if insert_line_index == -1:returnfor s in g_insert_nsis_script_list:all_nsis_script_lines.insert(insert_line_index, s)insert_line_index += 1nsis_script_path = nsis_script_template_path[:len(nsis_script_template_path) - len('-template.nsi')]nsis_script_path += '.nsi'f = open(nsis_script_path, "w")all_script = '\n'.join(all_nsis_script_lines)f.write(all_script)f.close()

NSIS制作Qt自定义界面安装包(三):禁默安装运行软件所需的运行环境(Vc_redist, bonjoursdk)相关推荐

  1. 使用NSIS制作revit插件安装包

    这里写自定义目录标题 使用NSIS制作revit插件安装包 下载 Addin文件 修改脚本文件 使用NSIS制作revit插件安装包 下载 NSIS DOWNLOAD HM NSIS Addin文件 ...

  2. NSIS制作自己的安装包

    想必大家都用过WinAMP 来播放MP3音乐,也都熟悉了WinAMP 的安装界面.它的安装程序小巧玲珑,简单直观.想为你自己编的程序制作一个这样的安装界面吗?完全可以,因为有免费的NSIS.它的全称是 ...

  3. Advenced Installer制作C#程序安装包过程.Net和Visual C++采用静默安装配置说明

    在制作C#程序安装包时,需要安装.Net Framework和Visual C++运行库文件.若采用一般安装模式会弹出安装界面,让用户点击确定进行安装,若用户选择出错会导致程序无法正常运行.给软件的运 ...

  4. NSIS + QT 制作自定义界面安装包

    NSIS + DUI(DLL形式)制作自定义界面的安装包有很多教程,但是NSIS + QT(DLL形式)实现自定义界面安装包的,翻遍全网,还真没找到有用的资料,无奈只能自己写一个! 先看效果,后续再分 ...

  5. QT自定义安装包制作原理

    一.准备工作 1.1 qt静态编译库,可以自己编译,也可以通过网上下载别人已经编译好的 已编译好的链接:qt5vs2017静态编译库-QT文档类资源-CSDN下载 1.2 压缩解压库,如 quazip ...

  6. IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权

    IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权 原文:IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权 上一篇: IS2009制作Oracle 静默安装包(一 ...

  7. 【海康威视】WPF客户端二次开发:【3】制作WPF/Winform安装包

    文章目录 一.前言 二.成果欣赏 三.打包前准备 1.创建WPF应用程序: 2.准备程序打包工具: 四.打包步骤 1.创建打包项目: 2.应用程序名称及公司: 3.选中安装程序类型: 4.设置安装项目 ...

  8. 制作安装包遇到的问题安装netframewo

    在一个桌面应用程序项目中,数据库用了MSSQLServer2000,开发语言使用C#2.0.即使用.NetFramework2.0框架.系统开发完成,部署安装的时候遇到的一些小问题.困扰我很久. 部署 ...

  9. 制作 Linux 一键安装包

    文章目录 制作 Linux 一键安装包 制作 Linux 一键安装包 像 Qt,Anaconda3 等都提供了 Linux 的一键安装包,后来在网上查到过制作 Linux 一件安装包的方法,感觉思维挺 ...

最新文章

  1. 零基础入门学习Python(19)-内嵌函数和闭包
  2. CAN总线基础(二)——CAN总线物理层介绍(总线电压详解)
  3. Activity和Service通信 使用BroadcastReceiver
  4. linux 热拔插硬盘,带电热插拔硬盘造成硬盘故障
  5. html列表按时间排序代码_按字母顺序排序的列表
  6. 【比赛】百度之星2017 复赛
  7. 硬盘数据恢复的神器有哪些
  8. 谭浩强c语言程序设计试题汇编pdf,C语言程序设计基础(谭浩强)习题.pdf
  9. 7种常用的数据标注工具
  10. 高德地图可视化3D地图区域上添加棱柱
  11. tpc1061ti使用说明_昆仑通泰触摸屏TPC1061Ti/TX
  12. 海康 linux java demo_Java 实现 海康摄像头抓拍图像 Windows、Linux
  13. 服务器安装系统路径,裸金属服务器安装多路径软件
  14. 如何实现自动化按图片搜索淘宝商品(拍立淘)功能?拍立淘API接口item_search_img
  15. 二倍图三倍图什么意思_什么是二倍图三倍图
  16. ubuntu双屏复制显示
  17. matlab处理afm图片,基于MATLAB的增大页岩AFM灰度图分辨率的方法与流程
  18. FMDB - - 归纳整理- Vic_Li
  19. 服务器散热风扇的制作流程,散热风扇生产操作工艺--制作流程
  20. Docker入门:边玩边学

热门文章

  1. 我的一点自学心得[摘]
  2. 职中计算机专业自我鉴定400字,中职计算机专业毕业自我鉴定
  3. webpack之工欲善其事,必先利其器
  4. 网络舆情舆论信息监督和收集的现代化技术解决方法
  5. 如何设计真正基于通证经济落地的商业生态模式设计?
  6. coreldraw凹槽_CATIA课时:操作工具栏创建修剪分割曲面视频教程_翼狐网
  7. python中import requests是什么意思_Ubuntu中python环境下import requests错误的解决(学习过程问题记录)...
  8. java polygon 用法_Java Polygon.getBounds方法代码示例
  9. 实战即时聊天,一文说明白:聊天服务器+聊天客户端+Web管理控制台。
  10. Dowiedz si? wi?cej o Nike Free Run