簡體   English   中英

如何執行具有依賴項的WiX自定義操作DLL文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM