我有一个InstallShield安装,它使用依赖于Visual C++ Runtime 8.0 sp1的自定义操作.在过去,我能够使用Microsoft提供的合并模块和Visual Studio安装运行时.基于Visual C++ Runtime 8.0 sp1并行安装在Vista上的工作方式,在安装的提交顺序之前,不能使用运行时.
这意味着我必须将自定义操作的执行移动到提交序列(不合需要,因为如果出现问题,在此序列中无法回滚安装)或者在安装之前使用InstallShield先决条件安装Visual C++ Runtime .
我更愿意安装Visual C++ Runtime作为先决条件,但InstallShield不提供此先决条件,因此我必须自己编写.我能够弄清楚如何配置安装运行时的先决条件,但我不知道如何确定它是否已经安装.是否有我可以检查的注册表项或文件版本来确定这个?
我找到了描述检测Visual C++ Runtime 8.0和Visual C++ Runtime 8.1的博客文章.基本上,您可以使用MSI自动化接口查找每个运行时的产品代码.
您还可以查找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[ProductCode],其中[ProductCode]是您尝试检测的运行时的产品代码(例如{7299052b-02a4-4627-81f2- 1818da5d550d}是8.0 sp1运行时的x86版本的产品代码.
这些方法仅用于检测是否安装了运行时可再发行组件包; 有可能安装了运行时,即使这些方法没有这样说明(例如,如果它是作为合并模块安装而不是使用可再发行组件),但在这种情况下安装可再发行组件不会有任何损害.