8

我有一个 InstallShield 安装,它使用依赖于 Visual C++ Runtime 8.0 sp1 的自定义操作。过去,我可以使用 Microsoft 提供的合并模块和 Visual Studio 来安装运行时。根据 Visual C++ Runtime 8.0 sp1 并行安装在 Vista 上的工作方式,在安装的提交顺序之前无法使用运行时。

这意味着我必须要么将我的自定义操作的执行移至提交序列(不受欢迎,因为如果出现问题,安装无法在此序列期间回滚),要么在安装之前使用 InstallShield 先决条件安装 Visual C++ 运行时.

我更愿意安装 Visual C++ Runtime 作为先决条件,但 InstallShield 不提供此先决条件,因此我必须自己编写。我能够弄清楚如何配置安装运行时的先决条件,但我不知道如何确定它是否已经安装。是否有我可以检查的注册表项或文件版本来确定这一点?

4

1 回答 1

11

我找到了描述检测Visual C++ Runtime 8.0Visual C++ Runtime 8.1的博客文章。基本上,您可以使用 MSI 自动化接口来查找每个运行时的产品代码。

您还可以查找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[ProductCode]其中 [ProductCode] 是您尝试检测的运行时的产品代码(例如 {7299052b-02a4-4627-81f2- 1818da5d550d} 是 x86 版本 8.0 sp1 运行时的产品代码)。

这些方法仅用于检测是否安装了运行时可再发行包;即使这些方法没有表明,也有可能安装运行时(例如,如果它是作为合并模块安装而不是使用可再发行组件),但在这种情况下安装可再发行软件包不会有任何损害.

于 2009-02-20T15:11:41.957 回答