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提取日志中的IP地址并去重
原日志文件:logger.log 内容: {"peer":"kts_001","type":"http"," ...
- .NET 云原生架构师训练营(模块二 基础巩固 路由与终结点)--学习笔记
2.3.3 Web API -- 路由与终结点 路由模板 约定路由 特性路由 路由冲突 终结点 ASP.NET Core 中的路由:https://docs.microsoft.com/zh-cn/a ...
- Linux-计算毫秒数
date +%s返回自划时代以来的秒数. date +%s%N返回秒数+当前纳秒数. 因此,echo $(($(date +%s%N)/1000000))是你需要的毫秒数 date +"%T ...
- Libata Error Message 解析
Libata error messages Contents [hide] 1 Overview 2 Prefix 3 Exception line 4 Input taskfile 5 O ...
- Python 虚拟环境 virtualenv 笔记
初始化 virtualenv 方式一: virtualenv 安装 virtualenv, 不用sudo的话, 是安装到用户home目录下 pip install virtualenv # 此时如果 ...
- ipset 笔记
官网:http://ipset.netfilter.org/ ipset是维护内核中IP sets结构的工具,允许你创建 匹配整个地址集合的规则.iptables配合ipset使用后不仅能单IP匹配, ...
- 【OpenGL ES】正方形图片贴到圆形上
1 前言 纹理贴图 中介绍了将矩形图片贴到矩形模型上,本文将介绍:在不裁剪图片的情况下,将正方形的图片贴到圆形模型上. 思考:实数区间 [0, 1] 与 [0, 2] 的元素可以建立一一映射关 ...
- Js中Number对象
Js中Number对象 JavaScript的Number对象是经过封装从而能够处理数字值的对象,Number对象由Number()构造器以及字面量声明的值在转化为包装对象时创建,JavaScript ...
- KQL笔记
KQL: {'query': {'bool': {'must': [{'match': {'Sql': 'insert'}}, {'match': {'PolicyName.keyword': 'd8 ...
- 导致Redis访问慢的常见操作
导致Redis访问慢的原因通常有2个方面: 第一,Redis本身性能出现了瓶颈,如:内存使用率过高,并发过大等 第二,存在大KEY,或者客户端访问命令使用不当引起的阻塞 在此,只列举因为的客户端命令使 ...