![](/img/trans.png)
[英]How to create SDK based WIX custom action in WIX v4 ? Specifically how to get the ..CA.dll to map in the .wxs file?
[英]How to execute a WiX custom action DLL file with dependencies
我想創建一個依賴於第三方.NET DLL的CustomAction C#DLL文件(在這種特定情況下,它是MySql.Data.dll
)。 我有C#自定義動作DLL文件與下面的WiX片段一起使用。 我只想弄清楚如何安全地向自定義操作添加依賴項。 注意:我實際上並不需要此第三方DLL文件文件來運行已安裝的應用程序。
<Binary Id="MyCustomAction.dll" SourceFile="MyCustomAction.CA.dll" />
<CustomAction Id="FixupConfigForMysql" Return="check" />
<InstallExecuteSequence>
<Custom Action='FixupConfigForMysql' After='InstallFiles'>NOT Installed</Custom>
</InstallExecuteSequence>
我是否需要安裝第三方DLL文件( MySql.Data.dll
)才能運行自定義操作?
我可以使用第三方DLL文件添加另一個二進制標記嗎?
WiX工具集中的DTF有一種機制,可以將自定義操作程序集及其所有引用包含在單個二進制文件中(基本上是自解壓dll)。 我不編寫托管自定義操作(C / C ++創建具有較少依賴性的自定義操作並提高成功率)但它應該在VS中構建時才起作用。
您可以使用<Binary />
添加運行自定義操作所需的任何文件。 那應該是你需要的任何第三方dll。 使用二進制元素包含的文件僅在安裝期間使用,不會被視為正在安裝的應用程序的一部分。
更新: CustomAction和Binary之間的連接是通過使用BinaryKey屬性引用自定義操作中的二進制文件來完成的。
除非您可以擁有多個BinaryKey屬性(我沒有嘗試過這個並且在MSI自定義操作表中沒有直接看到對此的任何支持),否則您只能根據一個二進制文件執行自定義操作。 因此,該二進制文件需要在其自身內攜帶所有必需的依賴項。
也就是說,如果你的dll都是.Net程序集,一個想法是使用ILMerge將它們打包成一個單獨的程序集。
在Visual Studio中將硬引用上的“復制本地”屬性設置為True。
繼Mensching先生的評論之后,我將填寫更多細節。
假設您至少使用Wix 3.0,則可以使用MakeSfxCA.exe將依賴項打包到單個DLL中。 (這是DFT - Deployment Tools Foundation的一個加載項。)基本上,首先要確保項目正在復制依賴的DLL。 制作CustomAction.config文件。 使用簡單的.bat文件進行測試,例如:
REM MyMakeSfxCA.bat - Run under $(TargetDir); abs. paths reqd.
"%WIX%\SDK\MakeSfxCA" ^
%cd%\Managed_custom_action_pkg.dll ^
"%WIX%\SDK\x86\sfxca.dll" ^
%cd%\Managed_custom_action.dll ^
%cd%\Dependent1.dll ^
%cd%\Dependent2.dll ^
%cd%\Microsoft.Web.Administration.dll ^
%cd%\Microsoft.Deployment.WindowsInstaller.dll ^
%cd%\CustomAction.config
一旦有效,轉換為構建后事件:
"$(WIX)\SDK\MakeSfxCA" ^
$(TargetDir)\Managed_custom_action_pkg.dll ^
"$(WIX)\SDK\x86\sfxca.dll" ^
$(TargetDir)\Managed_custom_action.dll ^
$(TargetDir)\Dependent1.dll ^
$(TargetDir)\Dependent2.dll ^
$(TargetDir)\Microsoft.Web.Administration.dll ^
$(TargetDir)\Microsoft.Deployment.WindowsInstaller.dll ^
$(TargetDir)\CustomAction.config
在.wxs文件中,您的二進制密鑰將如下所示:
<Binary Id="Managed_custom_action_CA_dll"
SourceFile="$(var.Managed_custom_action.TargetDir)$(var.Managed_custom_action.TargetName)_pkg.dll" />
對於CustomAction.config,您可以在線查找示例。
這是我發現的最佳方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.