我有一个非常相似的问题 这个 但答案对我不起作用。

我维护安装的软件依赖于 VC++ 2008(准确地说是 SP1),因此我需要找到一个解决方案来安装 VCRedist(如果尚未安装)。我知道正确的方法是使用合并模块构建 msi,但它不在我手中。

我提到的重复问题(已接受的问题)的答案对我来说不起作用,因为每个微小的版本(例如9.0.30729.01 vs 9.0.30729.17)具有正确的 GUID,我无法猜测或预测未来版本。此外,我认为这不会检测到 Visual Studio,因此当 VCRedist 包已经在开发人员计算机上时,就不需要安装它。我不想用这个来打扰任何人,当然不是已经安装了 DevStudio 的人。

现在另一个答案说我应该在 WinSxs-folder 中查看 $WINDIR\WinSxS\x86_Microsoft.VC80.CRT_ 但这(还)不能帮助我暗示 SP1,或者我现在还缺少什么吗?是否有一个包含内部和“外部”版本号的表格,以便我可以暗示某个次要版本号?

我不敢相信微软没有为这种情况提供任何东西,但是在互联网上搜索已经太久了,现在让我回到了好的ol'SO:)

有帮助吗?

解决方案

您可以采取推荐的方式安装的DirectX:始终运行可再发行。因为它是必需的,你已经把它运有一个在运行它,即使它已经安装了没有坏处。

其他提示

对于 Visual Studio C++ 2010, 事情变得容易了一些.

与 Visual C++ 2005 和 2008 可再发行软件包不同,有一些注册表项可用于检测 Visual C++ 2010 可再发行软件包是否存在。

Visual C++ 2010 可再发行包检测注册表值

Visual C++ 2010 可再发行组件包 (x86)

HKEY_LOCAL_MACHINE SOFTWORD MICROSOFT VISUALSTUDIO 10.0 VC VCREDIST X86]安装= 1(reg_dword)

Visual C++ 2010 可再发行组件包 (x64)

HKEY_LOCAL_MACHINE SOFTWORD MICROSOFT VISUALSTUDIO 10.0 VC VCREDIST X64]安装= 1(reg_dword)

Visual C++ 2010 可再发行组件包 (ia64)

HKEY_LOCAL_MACHINE SOFTWORD MICROSOFT VISUALSTUDIO 10.0 VC VCREDIST ia64]安装= 1(reg_dword)

笔记: :您需要在 64 位操作系统上检查 Wow6432Node。(HKLM\Software\Wow6432Node\Microsoft...)

如果您喜欢旧版本,这里是 GUID

Visual C++ 2010 可再发行包产品代码

  • Visual C++ 2010 可再发行软件包 (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • Visual C++ 2010 可再发行软件包 (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
  • Visual C++ 2010 可再发行软件包 (ia64) - {C1A35166-4301-38E9-BA67-02823AD72A1B}

Visual C++ 2010 SP1 可再发行包产品代码

  • Visual C++ 2010 SP1 可再发行软件包 (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • Visual C++ 2010 SP1 可再发行软件包 (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • Visual C++ 2010 SP1 可再发行软件包 (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}

看起来有 另一种解决方案 由微软开发人员提出,使用 MsiQueryProductState API, ,唉,还依赖 GUID。

更新: :该代码昨天上线,看起来运行良好。这是正在做的事情:它会检查我已知的最新 GUID 和安装位置的路径²。如果两者都失败,则已安装。这似乎工作正常。

此外,它是通过命令行参数“/qb”安装的,这意味着“无人值守但并非不可见”。看 另一篇博文 关于这些参数。

FWIW,Microsoft Visual C++ 2008 / VC90 SP1 可再发行组件的 GUID - x86 9.0.30729

  • 64位30729.17:8220EEFE-38CD-377E-8595-13398D740ACE
  • 32位30729.17:9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32位30729.01:6AFCA4E1-9B78-3640-8F72-A7BF33448200

² 路径:$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

我开源了 Github 上的一个 Visual C++ 项目,用于检查 VC++ 可再发行 DLL 特别是并在 Apache 2.0 许可证下提供它。

它具有三种不同的方法来检查 VC++9 和 VC++10 运行时的可用性:

  1. 检查 MsiQueryProductState API;
  2. 检查 WinSxS 文件夹的内容是否有匹配的产品目录;和
  3. 检查当前工作目录中是否有任何本地版本的 VC++9 和 VC++10 运行时(并检查其内容。)

下面是它的实际使用示例:

 wcout << _T("Checking for the availability of VC++ runtimes..") << endl;
 wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl;
 wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl;

我已获得许可 crt探测器 Apache 2.0 下的项目,因此请随意在您自己的应用程序中使用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top