WiX 在 msi 中安装 C++ 可再发行组件

标签 wix windows-installer

继我上一个问题 Why does my WiX Custom action throw a System.IO.FileNotFoundException? ,我现在正尝试将 C++ 可分发版安装为我的 msi 的一部分。

我已按照文档中的示例进行操作; http://wix.sourceforge.net/manual-wix3/install_vcredist.htm

<DirectoryRef Id="TARGETDIR">
      <Merge Id="VC_Redist" SourceFile="$(env.ProgramFiles)\Common Files\Merge Modules\Microsoft_VC100_CRT_x86.msm" DiskId="1" Language="0"/>
    </DirectoryRef>

    <Feature Id="Complete" Level="1" Title="$(var.NVRProduct) $(var.NVRVersion)" Description="Everything" Display="expand">
      <Feature Id="VC_Redist" Title="Visual C++ Runtime" AllowAdvertise="no" Display="hidden" Level="1">
        <MergeRef Id="VC_Redist"/>
      </Feature>      
    </Feature>

它不起作用。未安装 C++ 分发版,随后我的 msi 抛出错误,因为缺少 C++ 分发版,并自行卸载。

这个好像和这个问题一样,没有真正回答。 C++ Redistributable package with WIX

任何想法表示赞赏。

最佳答案

我将回答我自己的问题,因为在进一步调查后我发现了很多问题。

首先,VC++ 合并模块的安装确实有效!

我不认为这是因为我仍然遇到错误,而且我在添加删除程序中看不到 VC++ 运行时的条目,就像您手动安装它一样。

但是,通过将安装更改为仅安装可分发文件和应用程序直到我收到错误,我可以看到实际上正在安装 VC++ dll。我现在看到的错误是因为该程序也需要 ATL 可再发行组件。 (正如我通过使用 Dependency Walker 发现的那样)。该错误导致 msi 失败,并且 VC++ dll 与我的应用程序 dll 的其余部分一起被卸载!

一旦我按照帮助文件中的示例使用机制提供了 VC++ 和 ATL 可分发文件,一切都很好。

我还使用了静态链接的 SQLite dll,因为即使安装了可分发文件,自定义操作对 SQLite 的初始调用也失败了。我认为这一定是由于安装顺序问题。但是,使用静态链接版本在此处的开发人员中引起了一定程度的讨论,大约有 50-50 人赞成和强烈反对使用它。

但是,安装现在可以正常工作了。

关于WiX 在 msi 中安装 C++ 可再发行组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295825/

相关文章:

wix - 只读编辑控件

c# - Winforms 托盘应用程序和 WM_CLOSE

properties - 如果属性在安装时未设置,为什么在卸载时会被忽略?

installation - WIX 安装程序 : Adding POS as a prerequisite

com - 类表生成InprocServer32值问题

windows - 由于不正确的 MSI 检索,补丁程序删除一直失败

.net - 常见的 DLL 在 WiX 中是否应该具有相同的组件 ID

windows - 在 Windows 中,如何为没有安装权限的用户进行按用户安装?

.net - Windows 服务的 Wix 安装项目导致 FileNotFoundException

installation - Wix 重大升级