Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
有个需要是需要在安装包安装初始化时安装 Microsoft Visual c++ 2013 Redistributable
也就是判断软件安装前需不需要运行 vcredist_x64.exe
和 VC_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;
有两点需要注意:
- 测试时卸载后记得手动删除一下注册表内的信息,不然会有信息残留
- 摊牌卸载安装测试时,改动一下
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 不同版本区别的更多相关文章
- Inno Setup脚本语法大全
Inno Setup脚本语法大全 ResourceShare Bruce 11个月前 (10-28) 6136浏览 0评论 Inno Setup 是什么?Inno Setup 是一个免费的 Win ...
- Inno Setup脚本
某天夜晚一场狂风暴雨,由于办公室座位旁的窗户没关,笔记本电脑泡了一夜水,无法开机,无奈送修,里面的大量资料也不知道会不会丢失. is的脚本只有重新写了,重新研究了一下检测程序是否正在运行的判断方法,另 ...
- INNO SETUP脚本向导创建的基本脚本
脚本范例分析:先来看看一段用INNO SETUP脚本向导创建的基本脚本的[Setup]段: [Setup] AppName=Premiere 6.5 汉化补丁-----------------(程 ...
- 以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转)
以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转) ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCU ...
- inno setup脚本,涵盖了自定义安装界面,调用dll等等应用
; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETU ...
- 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 ...
- 使用Inno SetUp脚本打包Winform程序
在开发桌面程序时,往往需要用到打包工具将程序打包为exe可执行文件. 之前在项目中用了下 InstallShield Limited Edition for Visual Studio 2015,它 ...
- inno setup 脚本常用修改 转
http://blog.sina.com.cn/s/blog_72c2eb350100y2sa.html 有人提及想更换安装界面的图片,其实方法很简单,只需要修改inno setup安装目录下的Wiz ...
- Microsoft Visual C++ Redistributable Package下载
温馨提示: 1.目前,很多程序软件正常运行需要VC++库的支持,因此,博主在此做了一个合集,方便大家下载: 2.有需要的朋友请根据自己需要下载,博主所提供的下载地址均是微软官网的,请放心下载: 3.如 ...
- 『链接』Microsoft Visual C Redistributable/VC 再发行库 下载哪家强?
http://www.standaloneofflineinstallers.com/2015/12/Microsoft-Visual-C-Redistributable-2015-2013-2012 ...
随机推荐
- Linux-expect(以交互形式输入命令,实现交互通信)
1.expect简介 expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. 安装命令: yum install ex ...
- Linux-sshpass(shell脚本使用ssh远程执行命令通过密码的方式登录)
1. sshpass简介 sshpass 是一个在非交互式 ssh 会话中自动输入密码的工具.它可以直接在命令行中指定密码,因此可以用于 Shell 脚本等自动化场景.在 Red Hat 系统中,可以 ...
- 推荐一款id生成器: Hashids
唯一 id 生成的方式有很多种,比较常见的有以下几种方式: 语言自带功能,如 Java 中的 UUID,常用于后端 第三方工具提供,如 npm 中的 nanoid,常用于前端 Twitter 开源的 ...
- NC54586 小翔和泰拉瑞亚
题目链接 题目 链接:https://ac.nowcoder.com/acm/problem/54586 来源:牛客网 题目描述 小翔爱玩泰拉瑞亚 . 一天,他碰到了一幅地图.这幅地图可以分为 \(n ...
- npm无法安装node-sass 的问题
安装 node-sass 的问题呈现:4.9.0版本无法下载 Downloading binary from https://github.com/sass/node-sass/releases/do ...
- mktemp命令
mktemp命令 mktemp命令用于安全地创建一个临时文件或目录,并输出其名称,TEMPLATE在最后一个组件中必须至少包含3个连续的X,如果未指定TEMPLATE,则使用tmp.XXXXXXXXX ...
- Go语言的100个错误使用场景(48-54)|错误管理
目录 前言 7. 错误管理 7.1 panicking(#48) 7.2 不清楚何时应该包裹一个 error(#49) 7.3 检查错误类型不够精确(#50) 7.4 检查错误值不够精确(#51) 7 ...
- Windows xp 无法远程连接Windows Server 2008
-------------------------转载自: Windows XPSP3通过网络级身份验证方式连接Windows Server 2008远程桌面 远程桌面大大方便了大家的日常管理工作,W ...
- Spring Boot图书管理系统项目实战-3.用户登录
导航: pre: 2.项目搭建 next:4.基础信息管理 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.登录页设计 <!DOCTYP ...
- 【Android逆向】破解黑宝宝apk,绕过签名校验
这是52pojie的一道题,实现输入任何密码都可以登录成功 他知道你最近在学习Android逆向 他想在游戏上线前让你测试一下他新加的签名验证是否能防住别人的破解. 下面是李华编写的黑宝宝apk 链接 ...