Wix 的 VC++ 自定义操作

Posted

技术标签:

【中文标题】Wix 的 VC++ 自定义操作【英文标题】:VC++ custom action for Wix 【发布时间】:2017-09-28 08:39:42 【问题描述】:

我们在 WIX msis 中使用用 VC++ 编写的 CustomActions。它在 Windows7 机器上运行良好。但是,当我们尝试在 Win 10 中运行 msi 时,它无法正常工作并且失败,因为 Microsoft Visual C++ 2010 Redistributable Package 未默认安装在 Win 10 机器中。因此,为了使 MSI 正常工作,我们应该安装 Microsoft Visual C++ 2010 Redistributable Package。但问题是我们不能将它与 MSi 一起安装,因为自定义操作负责选择 INSTALLDIR,这将在安装任何东西之前发生。所以我的问题是

1.)我们真的需要 Visual C++ 2010 Redistributable 来运行 VC++ 自定义操作吗?

2.)在选择 INSTALLDIR 之前如何安装它?

【问题讨论】:

【参考方案1】:

只需使用静态库编译您的 DLL。在这种情况下,您的 DLL 没有其他依赖项。

在项目设置中将General->Use of MFC设置为Use MFC in a static library

C/C++ -> Code Generation 下选择MultithreadedMultithreaded Debug /MT 或/MTd 选项。

您可以使用 Dependency Walker 检查是否需要更多必须安装的 DLL。

【讨论】:

【参考方案2】:

您应该将 CRT 库静态链接到您的自定义操作 dll 中。

【讨论】:

以上是关于Wix 的 VC++ 自定义操作的主要内容,如果未能解决你的问题,请参考以下文章

WIX 自定义卸载操作失败

向 WiX 安装程序添加自定义操作

WIX、引导程序或自定义操作

WiX 自定义操作项目 - BadImageFormatException

为啥不推荐使用 JScript 在 WiX 中实现自定义操作?

WiX 自定义操作以按钮开始