17

我尝试安装 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 为部署项目构建时由 Visual Studio 插入的 DIRCA_CheckFX 提取自定义操作。我抓住了 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 报告的错误。

4

4 回答 4

54

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

  1. 关闭 Visual Studio 2013
  2. 用替换dpca.dll从 复制文件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. 重建
于 2014-09-25T13:26:08.047 回答
1

.vdproj resurrection 的预览版使用不支持 Windows XP 或 Server 2003 的 DLL。Microsoft发布了一个更新,可能已经修复了该错误。

于 2014-06-01T18:30:47.507 回答
1

这是我为 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)。

于 2014-09-21T05:23:44.627 回答
-2

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

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

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

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

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

Zataoca:自定义操作(通常)是对失败的承认。

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

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

于 2014-06-01T11:29:04.950 回答