通过注册表检测是否安装了VC++ 2008 SP1 redistributable。
来源:互联网 发布:sql定义表变量 编辑:程序博客网 时间:2024/05/17 01:13
在发布 vs2008 程序时,往往会发现程序在某些电脑上无法运行。原因是目标电脑上没有相关的VC运行库。
最简单的方法,就是到微软的官网上下载并安装最新的 Visual C++ 2008 SP1 redistributable package,对于32位的应用程序,也就是下载 vcredist_x86.exe。
对于程序的发布者,我们最好在程序的安装程序中打包上 vcredist_x86.exe。于是对于安装程序来说就会有检测是否已经安装了 Visual C++ 2008 SP1 redistributable package(86) 这个问题。这里介绍通过注册表检测的方法:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{86CE1746-9EFF-3C9C-8755-81EA8903AC34}
如果此项(Key)存在,则已安装。
另外, Visual C++ 2008 SP1 redistributable package(86) 安装后,还会生成以下项(Key)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED\2052
检查此项(Key)的 SPName 值是否是“SP1”,是,则安装。
我认为在实际操作中,选择其中一个注册表项检查即可。
这里要说明几点:
1. {86CE1746-9EFF-3C9C-8755-81EA8903AC34} 是 vcredist_x86.exe 的GUID号。因此不同发布版本的GUID号,也不相同。要想通过注册表检测是否安装vcredist_x86.exe,就必须先知道其准确的GUID号。
2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED\2052中的2052项,虽然不知道是什么意思,但是同GUID号一样,不同版本的 vcredist_x86.exe,此项的值也不相同。
3. 对于 Win7 和 Win8 64位电脑来说,要注意操作系统的注册表分为32位注册表和64位注册表。通过 regedit 查看到的路径都是64位的注册表项,而32位的注册表被重定义到:HKEY_LOCAL_MACHINE\Software\WOW6432Node 路径下。因此对于64位的电脑,想要通过 regedit 来查看注册表的变化,则寻找的注册表项分别是:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{843e5a96-1ee3-4275-a965-14feac1cc02e}
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\9.0\RED\2052
4. Windows 应用程序在操作注册表的时候会自动区分 32bit 方式和 64bit 方式。运行于 64bit 系统下的 32bit 应用程序默认操作32位注册表项(即被重定向到WOW6432Node下的子项);而 64bit 应用程序才是操作的直观注册路径。因此,在32位环境中编写的程序在操作注册表时不需要考虑在64位环境运行时找不到注册表项。尽管你在代码中写的是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED\2052,当运行在64位系统中时,会自动重定向到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\9.0\RED\2052 中去。
5. 以上关于在64位操作系统的注册表中寻找32位注册表项的叙述,只针对HKEY_LOCAL_MACHINE 主键,不适用于HKEY_CURRENT_USER 主键。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
上文提到了将vcredist_x86.exe 集成到安装程序中,下面是用 Inno setup 编写安装程序,检测 vcredist_x86.exe 是否已经安装及集成 vcredist_x86.exe 的代码。
- 通过注册表检测是否安装了VC++ 2008 SP1 redistributable。
- 通过注册表查询Visual C++ Redistributable Package是否安装
- VC++Redistributable的安装判断
- VC++Redistributable的安装判断
- 通过JavaScript检测浏览器是否安装了Flash Player
- adblockTester通过js检测用户浏览器是否安装了AdBlock
- 检测VC++Redistributable运行库 & vcredist_x86.exe
- C#通过注册表检测是否安装Office和QQ等软件
- VC++ 动态检测串口的热插拔(二)通过注册表实现
- VC++ 动态检测串口的热插拔(一)通过注册表实现
- 安装VC++ 2015 redistributable遇到的错误
- VC中通过查询注册表判断是否为无线网卡
- VC中通过查询注册表判断是否无线网卡
- Microsoft Visual C++ 2008 SP1 Redistributable Package (VC2008运行库)
- 如何检测VC运行库是否安装
- visual studio 2005 sp1 8.0.50727.4053 对应的vc++ redistributable 包
- vc++通过执行特权指令来检测是否是虚拟机
- VC通过注册表获取获取某个应用程序的安装路径
- 张亮穿泳裤出镜戏水耍酷 女粉丝见状大呼把持不住
- Missing separate debuginfos, use: debuginfo-install 解决方法如下----笛风读书笔记系列
- 如何来理解c语言的这个陷阱
- jQuery选择器大全
- pdb调试python脚本
- 通过注册表检测是否安装了VC++ 2008 SP1 redistributable。
- 【重新上本科】在实际问题中,内存赋值所拖累的效率(c++版本)
- 手机淘宝公布3.8包场细节 再度出击O2O
- 转:Maven常用命令
- jsoup Cookbook(中文版)
- Windows8 环境下的 jekyll 本地搭建
- 无语
- deep learning:改进BP过程的一些参数设定
- ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)