代码之家  ›  专栏  ›  技术社区  ›  Adam Tegen

如何执行带有依赖项的WiX自定义操作DLL文件

  •  25
  • Adam Tegen  · 技术社区  · 16 年前

    我想创建一个依赖于第三方的CustomAction C#DLL文件 .NET 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文件中添加另一个Binary标记吗?

    4 回复  |  直到 13 年前
        1
  •  25
  •   Rob Mensching    16 年前

    WiX工具集中的DTF有一种机制,可以将您的自定义操作程序集及其所有引用包含在一个二进制文件中(基本上是自解压dll)。我不编写托管自定义操作(C/C++创建的自定义操作依赖性更少,成功率更高),但它应该只在VS中构建时工作。

        2
  •  5
  •   Peter Lillevold Rene    16 年前

    您可以使用 <Binary /> 添加运行自定义操作所需的任何文件。这也适用于您需要的任何第三方dll。使用二进制元素包含的文件仅在安装过程中使用,不会被视为正在安装的应用程序的一部分。

    更新: CustomAction和Binary之间的连接是通过使用BinaryKey属性引用自定义操作中的二进制文件来完成的。

    除非你可以有多个BinaryKey属性(我没有尝试过,也没有在 MSI custom action table

    ILMerge 将它们打包成一个组件。

        3
  •  5
  •   David    16 年前

    在Visual Studio中将硬引用的“复制本地”属性设置为True。

        4
  •  1
  •   Gordon Leigh William Shurtleff    8 年前

    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,您可以在网上找到示例。

    这是我找到的最好的方法。