有个需要是需要在安装包安装初始化时安装 Microsoft Visual c++ 2013 Redistributable

也就是判断软件安装前需不需要运行 vcredist_x64.exeVC_redist.x64.exe 这两个程序

第一反应就是可以通过注册表判断是否已经安装过环境

但测试发现需求的两个版本不同,注册表位置竟然也不一样

问 chatgpt 答案不对,bing 搜索半天也没找到答案,stackoverflow 也有很多类的答案测试后很多都无法成功,最后结合多个结果终于折腾成功

记录如下:

判断 Microsoft Visual c++ 2013 Redistributable(x64) - 12.0.30501 是否已经安装

注册表位置 'SOFTWARE\WOW6432Node\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum'

官方下载的安装包名为 vcredist_x64.exe

function IsVCRedistInstalled2013: Boolean;
var
ResultCode: Cardinal;
begin
Result := RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum', 'Install', ResultCode);
if Result and (ResultCode = 1) then
begin
Log('vcredist_x64 2013 visual c++ redistrbutable has already been installed.');
end
else
begin
Log('vcredist_x64 2013 never installed. installing...');
end;
end;

判断 Microsoft Visual C++ 2015-2022 Redistributable(x64) - 14.31.31103 是否已经安装

注册表位置 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64

官方下载的安装包名为 VC_redist.x64.exe

function IsVCRedistInstalled2015_2022: Boolean;
var
ResultCode: Cardinal;
begin
Result := RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64', 'Installed', ResultCode);
if Result and (ResultCode = 1) then
begin
Log('VC_redist.x64 2015+ visual c++ redistrbutable has already been installed.');
end
else
begin
Log('VC_redist.x64 2015+ visual c++ redistrbutable never installed. installing...');
end;
end;

有两点需要注意:

  1. 测试时卸载后记得手动删除一下注册表内的信息,不然会有信息残留
  2. 摊牌卸载安装测试时,改动一下 Result := RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64' 中的路径,因为有可能会有缓存导致测试的时候判断不准确

至于判断后的安装就简单一点了:

[Files] 节点说明安装包的位置

[Files]
Source: "{#DIST_PATH}\win-unpacked\resources\bin\VC_redist.x64.exe"; DestDir: "{tmp}\resources\bin"
Source: "{#DIST_PATH}\win-unpacked\resources\bin\vcredist_x64.exe"; DestDir: "{tmp}\resources\bin"

在 [code] 节点解压并执行安装

[code]
function InstallVC_redist2015_2022: Boolean;
var
ResultCode: Integer;
begin
ExtractTemporaryFiles('{tmp}\resources\bin\VC_redist.x64.exe')
if not Exec(ExpandConstant('{tmp}\resources\bin\VC_redist.x64.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
begin
Log('Failed to execute VC_redist.x64.exe. Error code: ' + IntToStr(ResultCode));
end;
end;

vcredist_x64 2013 照葫芦画瓢即可

我的 windows 版本

版本 Windows 10 企业版

版本号 21H2

安装日期 ‎2021/‎11/‎3

操作系统内部版本 19044.3086

体验 Windows Feature Experience Pack 1000.19041.1000.0


博客园: http://cnblogs.com/willian/

github: https://github.com/willian12345/

Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别的更多相关文章

  1. Inno Setup脚本语法大全

    Inno Setup脚本语法大全 ResourceShare Bruce 11个月前 (10-28) 6136浏览 0评论   Inno Setup 是什么?Inno Setup 是一个免费的 Win ...

  2. Inno Setup脚本

    某天夜晚一场狂风暴雨,由于办公室座位旁的窗户没关,笔记本电脑泡了一夜水,无法开机,无奈送修,里面的大量资料也不知道会不会丢失. is的脚本只有重新写了,重新研究了一下检测程序是否正在运行的判断方法,另 ...

  3. INNO SETUP脚本向导创建的基本脚本

    脚本范例分析:先来看看一段用INNO SETUP脚本向导创建的基本脚本的[Setup]段: [Setup]   AppName=Premiere 6.5 汉化补丁-----------------(程 ...

  4. 以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转)

    以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转) ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCU ...

  5. inno setup脚本,涵盖了自定义安装界面,调用dll等等应用

    ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETU ...

  6. Inno Setup 脚本

    给你个我用的例子: Delphi/Pascal code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...

  7. 使用Inno SetUp脚本打包Winform程序

    在开发桌面程序时,往往需要用到打包工具将程序打包为exe可执行文件. 之前在项目中用了下 InstallShield Limited Edition for Visual Studio  2015,它 ...

  8. inno setup 脚本常用修改 转

    http://blog.sina.com.cn/s/blog_72c2eb350100y2sa.html 有人提及想更换安装界面的图片,其实方法很简单,只需要修改inno setup安装目录下的Wiz ...

  9. Microsoft Visual C++ Redistributable Package下载

    温馨提示: 1.目前,很多程序软件正常运行需要VC++库的支持,因此,博主在此做了一个合集,方便大家下载: 2.有需要的朋友请根据自己需要下载,博主所提供的下载地址均是微软官网的,请放心下载: 3.如 ...

  10. 『链接』Microsoft Visual C Redistributable/VC 再发行库 下载哪家强?

    http://www.standaloneofflineinstallers.com/2015/12/Microsoft-Visual-C-Redistributable-2015-2013-2012 ...

随机推荐

  1. 【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5

    在 MacOS 上使用 OpenVINO C# API 部署 Yolov5 项目介绍 YOLOv5 是革命性的 "单阶段"对象检测模型的第五次迭代,旨在实时提供高速.高精度的结果, ...

  2. 冰点还原 deep freeze 安装,招聘机试时用到

    官方地址:https://www.faronics.com https://www.bingdiancn.com/(也可以从这个网站下载,我是从这个网站下载的) 需求:招聘时 需要机试,需要做项目,为 ...

  3. 通过程序自动设置网卡的“internet共享”选项

    操作系统 : Windows 10_x64 [版本 10.0.19042.685] Windows下可以通过网卡共享进行上网,但是需要在网卡的属性里面进行设置,需要在视窗界面进行操作,不能实现自动化. ...

  4. Springboot+Bootstrap实现增删改查实战

    说明 最近有朋友问我有没有Springboot+Bootstrap实现增删改查的DEMO,当时没有,现在他来了! 实现效果 代码地址 https://gitee.com/indexman/bootst ...

  5. 深入理解Go语言(08):sync.WaitGroup源码分析

    一.sync.WaitGroup简介 1.1 sync.WaitGroup 解决了什么问题 在编程的时候,有时遇到一个大的任务,为了提高计算速度,会用到并发程序,把一个大的任务拆分成几个小的独立的任务 ...

  6. 2024-02-24:用go语言,给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1, 同时还有一个数组 edges ,其中 edges[i] = [fromi, toi, weighti

    2024-02-24:用go语言,给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1, 同时还有一个数组 edges ,其中 edges[i] = [fromi, toi, weighti ...

  7. 进程,join的使用,守护进程---day30

    1.进程 # ### 进程 import os,time #当前进程id(子进程) res = os.getpid() print(res) #1772 #当前进程id(父进程) res = os.g ...

  8. sql题目---day39

    # 1.查询所有的课程的名称以及对应的任课老师姓名 #where select teacher.tname,course.cname from teacher,course where course. ...

  9. 服务网关ZUUL过滤器

    过滤器两个功能: 1.其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础: 2.过滤器功能则负责对请求的处理过程进行预干预,是实现请求校验.服务聚合等功能的基础. 有4类 ...

  10. 【Azure 服务总线】Azure门户获取ARM模板,修改Service Bus的TLS版本

    问题描述 在Azure中创建Sverice Bus服务后,如果想修改服务的TLS版本,是否有办法呢? 问题解答 通过Service Bus的ARM模板,修改属性值中的 minimumTlsVersio ...