常见环境
从 Visual Studio .NET 到 Visual Studio 2013,C++ 编译器和工具的每个主版本都包含一个新的独立版本的 Microsoft C 运行 (CRT) 库。
CRT 的这些独立版本彼此独立,并在不同程度上彼此不兼容。
例如,Visual Studio 2012 使用的 CRT 库是第 11 版,名为 msvcr110.dll,而 Visual Studio 2013 使用的 CRT 是第 12 版,名为 msvcr120.dll。
从 Visual Studio 2015 开始,不再是这样。 Visual Studio 2015 及更高版本的 Visual Studio 都使用一个通用 CRT。
通用 CRT (UCRT) 是 Microsoft Windows 操作系统组件。 它包含在 Windows 10 和 Windows Server 2016 或更高版本中作为操作系统的一部分。
对于仍处于扩展支持的较早版本的操作系统,可使用 Windows 更新来提供 UCRT。 支持通用 CRT 本地部署,但有一些限制。
C++下载
32位下载地址:https://aka.ms/vs/16/release/vc_redist.x86.exe
.NET Framework下载
https://dotnet.microsoft.com/download/visual-studio-sdks
.NET Framework 4.5.2离线安装包:https://www.microsoft.com/en-us/download/details.aspx?id=42642
本地安装
运行库下载地址
链接:https://pan.baidu.com/s/1qSF3i3Ny4GddNvg7U_8EbQ
提取码:psvm
注意
这里更推荐使用本地安装的方式,虽然安装包大了12M,但是用户的安装体验会好一点。
检测C++环境
下载文件D:\Tools\runtime
目录下
加载文件
1 | [Files] |
运行时安装
1 | [Run] |
如果不使用静默安装
1 | [Run] |
检测是否需要安装
1 | [Code] |
检测运行库是否安装是通过注册表进行检测的,其中最后一段字符是运行库的产品ID,每个版本的产品ID都不一样
解压下载后的vc_redist.x86.exe
文件,找到名称为0
的文件使用文本文档打开,
搜索ProductCode
会搜索出两个,其中一个是Minimum Runtime,一个是Additional Runtime
1 | RollbackLogPathVariable="WixBundleRollbackLog_vcRuntimeMinimum_x86" ProductCode="{7D75664A-6C04-424C-82A1-EE88913E5F16}" |
和
1 | RollbackLogPathVariable="WixBundleRollbackLog_vcRuntimeAdditional_x86" ProductCode="{77EB1EA9-8E1B-459D-8CDC-1984D0FF15B6}" |
我们用到的是WixBundleRollbackLog_vcRuntimeAdditional_x86
,在注册表中搜索对应产品ID即可
检测.Net Framework环境
下载文件D:\Tools\runtime
目录下
加载文件
1 | [Files] |
运行时安装
1 | [Run] |
注意
这里要从网络上下载文件不使用静默安装
检测是否需要安装
1 | function IsInstallDotNet(version: string; service: cardinal): boolean; |
检测C++和.Net Framework环境
1 | [Files] |
在线下载
检测C++安装环境
这两种方式各有利弊,推荐方式1。
- 方式1 如果用户有更新的版本,会检测不存在,新版本存在的时候旧版本又无法安装,但是它比较准确。
- 方式2 不存在方式1的问题 但是如果用户安装后又卸载了VC环境的话,这种方式检测VC依旧存在,但实际已经不可用了。
方式1(推荐)
1 | [Code] |
注意:
这一种方式能够保证VC环境一定没问题,但是如果电脑上本身已安装其他相同大版本的其他版本就会导致安装失败!
微软的
不同版本的VC包的产品编号都是不一样
的,所以这里为了保证安装旧版的VC的用户不再提示安装新版,所以添加了判断。推荐使用这种方式。
方式2
另外一种方法
1 | [Code] |
注意
这一种方式解决了相同大版本下不同小版本判断是否安装的问题,但是如果电脑上曾经安装过符合要求的版本后,再卸载,这种方法判断的VC环境还存在,就会导致问题。
检测.Net Framework环境
查看本机的版本
输入regedit.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\policy\
脚本
1 | [Code] |
注意很多文章查找注册表的地址为
1 | RegKeyExists(HKLM, 'SOFTWARE/Microsoft/.NETFramework/policy/v2.0') |
这个获取的版本比较粗略(类似于v2.0/v4.0)不建议使用这个地址。
如图
地址HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\
获取的就比较细致了
检测C++和.Net Framework环境
1 | [Code] |
检测其它环境
检测Screen Capturer Recorder
1 | [Code] |
这个我们会发现其实注册表的真实路径为
SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Screen Capturer Recorder_is1
但是我们使用上面的路径依旧能找到,是因为系统会自动重定向到这个目录去找
但是不推荐使用下面的这个路径,下面的这个路径不支持XP,上面的那种都支持。