我有在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>
答案 0 :(得分:1)
您的自定义操作是使用托管的.Net语言(可能是C#或VB.Net)编写的。由于msi文件可能只包含由本机代码组成的dll自定义操作,因此DTF工具(特别是工具makesfxca.exe
)将托管dll与帮助程序代码打包/包装,从而生成自解压本机代码dll。遵循WIX的命名约定,本机自定义操作dll包含.CA
中缀。
为了实现这一点(即,使用用于生成托管代码的语言编写自定义操作),必须进行自我提取。因此,对您的问题的简短回答是“否”。
答案 1 :(得分:1)
DTF自动将其文件提取到临时文件夹以供执行,然后清理处理。这非常好,因为它消除了某些竞争条件。如果愿意,您仍然可以将这些文件编写到安装程序中。例如,在以前的公司,我们的安装程序在安装期间使用多个DLL进行许可检查,并安装它们以供应用程序在运行时使用。
顺便说一句,确保你已经看到了这个: