0

我有在 installshield 中创建的 msi 设置,我正在执行 DTF 自定义操作 dll 作为提交自定义操作。如果我将 MessageBox.Show 插入到自定义操作中,我可以看到 [PROGRAMFILESDIR] 中有一个名为“CustomActionProject.CA.dll-”的临时文件夹,并且复制了 CustomActionProject.CA.dll 及其所有引用。

有没有办法告诉技术不要创建这个临时文件夹并在 .CA.dll 所在的同一文件夹中提取 + 执行 CustomActionProject.CA.dll?

编辑:

我发现我无法通过配置 wix.ca.targets 将引用包含在 .CA.dll 中。在我的情况下,这可以防止 .CA.dll 包含 20MB 的 dll。

现在我想确保 CustomActionProject.dll 能够看到随产品安装的引用。

这些文件是:

<ProgramFilesFolder>
  <MyApplicationFolder>
    CustomActionProject.CA.dll
    ... About 30 dlls installed with the application that CustomActionProject.dll needs to call
    <Place I Would Like to See CustomActionProject.dll extracted> 
4

2 回答 2

1

您的自定义操作是用托管的 .Net 语言(可能是 C# 或 VB.Net)编写的。由于 msi 文件可能仅包含由本机代码组成的 dll 自定义操作,因此 DTF 工具,特别是该工具makesfxca.exe,将托管 dll 与帮助代码一起打包/包装,从而产生自提取的本机代码 dll。按照 WIX 的命名约定,本机自定义操作 dll 包含一个中.CA缀。

为了使这一点(即使用生成托管代码的语言编写的自定义操作)起作用,必须进行自提取。因此,您的问题的简短回答是“”。

于 2014-09-02T23:33:00.900 回答
1

DTF 会自动将其文件提取到临时文件夹以执行,然后在处理时进行清理。这非常好,因为它消除了某些竞争条件。如果您愿意,您仍然可以将这些文件创作到您的安装程序中。例如,在以前的公司,我们的安装程序在安装过程中使用了几个 DLL 来检查许可证,并安装它们以供应用程序在运行时使用。

顺便说一句,确保你已经看到了这个:

WiX DTF 行为警报

于 2014-09-04T18:30:44.547 回答