visual-c++ - 如何以编程方式确定是否安装了 Visual C++ Runtime 8.0?

标签 visual-c++ installation runtime installshield prerequisites

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

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

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

最佳答案

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

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

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

关于visual-c++ - 如何以编程方式确定是否安装了 Visual C++ Runtime 8.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/566259/

相关文章:

performance - 如何计算已创建算法的理论运行时间?

使用 Runtime.getRuntime() 执行命令时,Java 应用程序不从文件中读取

java - 如何在 big-o 中找到算法的运行时间

c# - Ascii 到 XML 字符集转换

visual-studio-2010 - 安装 Visual Studio 2010(任何版本)只会在 C++ 头文件目录中安装 2 个文件

installation - 安装程序问题: "Program Files" or "Program Files (x86)"?

macos - 安装后无法连接到 Mac OS X 上的 Postgresql

c++ - 为什么discard的参数是unsigned long long类型的?

c++ - C中关于除以零的一些事情

c++ - 在现有项目中创建 CPPUnit 测试需要哪些 .cpp 和 .h 文件?