我有一个InstallShield安装,它使用依赖于Visual C ++ Runtime 8.0 sp1的自定义操作。在过去,我能够使用Microsoft提供的合并模块和Visual Studio安装运行时。基于Visual C ++ Runtime 8.0 sp1并行安装在Vista上的工作方式,在安装的提交顺序之前,不能使用运行时。
这意味着我必须将自定义操作的执行移动到提交序列(不合需要,因为如果出现问题,安装无法在此序列中回滚)或者在安装之前安装Visual C ++ Runtime InstallShield先决条件。
我更愿意安装Visual C ++ Runtime作为先决条件,但InstallShield不提供此先决条件,因此我必须自己编写。我能够弄清楚如何配置安装运行时的先决条件,但我不知道如何确定它是否已经安装。是否有我可以检查的注册表项或文件版本来确定这个?
答案 0 :(得分:10)
我找到了描述检测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版本的产品代码。
这些方法仅用于检测是否安装了运行时可再发行组件包;有可能安装了运行时,即使这些方法没有这样说明(例如,如果它是作为合并模块安装而不是使用可再发行组件),但在这种情况下安装可再发行组件不会有任何损害