【问题标题】:DIRCA_CHECKFX Return Value 3 - VS 2013 Deployment ProjectDIRCA_CHECKFX 返回值 3 - VS 2013 部署项目
【发布时间】:2014-07-21 15:14:21
【问题描述】:

我在尝试安装 MSI 时遇到了可怕的问题:

MSI (c) (98:B0) [18:01:22:818]: Invoking remote custom action. DLL: C:\DOCUME~1\sspencer\LOCALS~1\Temp\1\MSI19.tmp, Entrypoint: CheckFX
MSI (c) (98:FC) [18:01:22:833]: Cloaking enabled.
MSI (c) (98:FC) [18:01:22:833]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (98:FC) [18:01:22:833]: Connected to service for CA interface.
Action ended 18:01:22: DIRCA_CheckFX. Return value 3.

经过一番挖掘,这实际上表明DLL无法完全加载,CA服务器无法连接并开始点击DLL入口点。

我使用 orca 和 7zip 为 DIRCA_CheckFX 提取自定义操作,该操作由 Visual Studio 在构建部署项目时插入。我抓住了 DLL,然后在主机系统(Server 2003 R2)中执行了 Dependency Walker,它给出了错误:

Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.

我使用 VS 2010 编译器重新编译了系统,提取了 DLL 并在其上运行了dependency walker,这并没有产生同样的错误。即 VS 2010 编译工作,VS 2013 编译失败,因为包含的 DLL 不会在目标环境中加载。

我的问题是如何解决缺少哪些 DLL 的问题,以解决 Dependency Walker 报告的错误。

【问题讨论】:

  • 如果是我,我会切换到一个足够聪明的工具,知道如何在不使用自定义操作的情况下检查 .NET。这就是 AppSearch 的用途。
  • 告诉微软,他们编写 CA 作为部署项目的一部分,我只是想在不完全重写 WiX 的情况下推进我的环境。
  • 垃圾进垃圾出。现在是你的问题。对不起。
  • 顺便说一句,迁移到 WiX 更像是重构而不是重写。我运行一个开源项目,它提供了图形 UI 设计器和项目模板,让这一切变得更容易。如果您想进行免费的团队查看器会话,我怀疑转换安装程序需要超过 1-2 小时。
  • @Spence 你解决了吗?对于我们在 VS2013 和 2010 中使用新的安装程序扩展构建安装程序来说,这仍然是一个问题。我的同事在这里提出了一个问题stackoverflow.com/questions/25039568/…

标签: dll visual-studio-2013 dependencies windows-installer vdproj


【解决方案1】:

必须安装VS 2010,您可以从中获取有效文件“dpca.dll”。

  1. 关闭 Visual Studio 2013
  2. 复制文件并替换 dpca.dll from C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\DeploymentC:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\VSI\bin
  3. 打开项目
  4. 重建

【讨论】:

  • @GhostCKY - 如果可以的话,我会给你 100 分的答案!我在 VS2013 设置中遇到了“安装中断”错误,并花了至少 40 个小时寻找原因。您的简单文件交换解决了问题。谢谢你一百万次!
  • 这应该是公认的答案,至少在 MS 发布修复程序之前是这样
  • @Shy - 我不确定 MS 是否会发布修复程序,因为生成补丁没有意义,Windows XP 不支持该补丁。
  • @GhostCKY 我也希望我能给你这个答案 100 分。我花了几天时间试图弄清楚为什么我的安装程序无法在 Server 2003 上运行。您的解决方案让我度过了一个周末!
  • 仅供参考,此修复也适用于 VS2015,我遇到了麻烦,谢天谢地 @GhostCKY 成功了,非常感谢!
【解决方案2】:

这是我为解决 32 位部署项目的此问题所做的工作。

  1. 在 VS2010 中构建一次安装项目。这个包没有受到问题的困扰,但我不想继续构建不同的 VS 版本。

  2. 使用 Orca 打开生成的 msi,选择 Binary 表并将 MSVBDPCADLL 的内容导出到文件。

  3. 现在在 VS2013 中构建后,使用 Orca 将导出的数据导入 Binary\MSVBDPCADLL 以修复包。

我必须对 64 位项目做类似的事情,但在这种情况下,它是导入正确的 InstallUtil 二进制文件(即 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtilLib.dll)。

【讨论】:

    【解决方案3】:

    .vdproj resurrection 的预览版使用不支持 Windows XP 或 Server 2003 的 DLL。Microsoft posted an update 可能已经修复了该错误。

    【讨论】:

    • 那篇文章中没有任何关于兼容性的内容。我对参考感兴趣,因为如果它不兼容,我将不得不强制迁移到 WiX。
    • 我只是建议它,因为如果他们解决了问题,它可能在更新中。由于它是预览版,因此我不建议将其用于生产版。
    【解决方案4】:

    Visual Studio 部署项目太可怕了,以至于微软从 Visual Studio 2012 中删除了它们。开发人员不知道为什么它们很糟糕,以至于他们恳求他们回来。了解 MSI 的微软聪明人离开了大楼,剩下的人向开发人员屈服,要求它回来。

    其中一位非常聪明的人在推文中完美地总结了这一点:

    vdproj 的回归:爆头,人,或者他们作为步行者回来。

    我写了一篇关于我的感受的文章:Visual Studio Installer Resurrection

    所以让我们来谈谈这个工具这次让你失望的方式。花点时间阅读这篇由其他真正聪明的离开 MSFT 的人写的文章:

    Zataoca: Custom actions are (generally) an admission of failure.

    VDRPOJ 创建了一个自定义操作来执行 MSI 可以在本地完成的操作,但现在它失败了。因此,假设您找到 DLL 并修复它以在您的机器上工作。当您将 MSI 运送到 1,000,000 台机器时会发生什么?有多少台机器会出现故障?您将收到多少个支持电话?你会收到多少条推文表明你的产品很糟糕?

    简单地说,我会使用更好的工具(例如 Windows Installer XML 和 Industrial Strength Windows Installer XML)重做您的安装程序。如果您有钱花,InstallShield Professional 也是一个不错的选择。

    【讨论】:

    • 所有新项目都在使用 WiX。这是一个遗留项目,现在我只是试图将编译器向前移动。其次,这是在 Microsoft 代码本身中,我只是想看看是否有办法识别缺少哪个 DLL,这样我就可以尝试找出我错过的依赖项......
    • 这些消息表明问题不是缺少 Dll。问题是代码正在调用一个 Dll 中不存在的入口点,例如添加到 msi.dll 的 API,仅作为示例。 Dependency Walker 应该告诉你我确定是哪一个。它应该在某处突出显示丢失的呼叫。
    • 抱怨 VS 项目无济于事。
    • 耶稣!人们真的很讨厌它。我将使用 WiX 并弄清楚如何让我的安装程序与 Win7 和 XP 一起工作,而不是分别安装一个。
    • Visual Studio 部署项目并不可怕;他们工作;它们是快速部署简单项目的最佳方式。 MS 在 IIS 7.5 中引入了重大更改,要求您进入 Windows 功能和“角色服务”以获得安全性和 IIS 管理控制台。
    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多