Visual Studio - 无法让 Wix 自定义操作在 Votive/VS2010 中工作



帮助!我需要在我的Wix 3.5安装项目中执行一个托管的自定义操作,无论我尝试了什么,我都无法让它发挥作用。

我正在Visual Studio 2010中使用Votive集成。我的Wix产品.wxs文件与visual studio模板基本上没有变化,除了一些文本更改:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="666ffc07-90b2-4608-a9f0-a0cc879f2ad0" Name="Product Name" Language="1033" Version="5.5.0002" Manufacturer="TiGra Astronomy" UpgradeCode="d17a5991-b404-4095-9e93-08d2db984cfd">
    <Package InstallerVersion="200" Compressed="yes" />
    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLLOCATION" Name="Directory Name">
                <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
                <!-- <Component Id="ProductComponent" Guid="3ea5ade7-9b7b-40da-9e83-13e066a000ef"> -->
                    <!-- TODO: Insert files, registry keys, and other resources here. -->
                <!-- </Component> -->
            </Directory>
        </Directory>
    </Directory>
    <Feature Id="ProductFeature" Title="ASCOM Driver" Level="1">
        <!-- TODO: Remove the comments around this ComponentRef element and the Component above in order to add resources to this installer. -->
        <!-- <ComponentRef Id="ProductComponent" /> -->
        <!-- Note: The following ComponentGroupRef is required to pull in generated authoring from project references. -->
        <ComponentGroupRef Id="Product.Generated" />
    </Feature>
</Product>

我已经设置了对我的托管自定义操作项目的引用,将HARVEST属性设置为true。该项目名为WIX.CustomActions,生产WIX.CustomActions.dllWIX.CustomActions.CA.dll

我看到Wix在构建过程中处理引用,WIX.CustomActions.dll程序集显示在最终安装项目的Binary表中,但WIX.CustomActions.CA.dll没有。

我有一个CustomActions.wxs,它应该打包并调用自定义操作:

    <?xml version="1.0" encoding="UTF-8" ?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Fragment>
    <Binary Id="DriverRegistrationCA" SourceFile="$(var.WIX.CustomActions.TargetDir)$(var.WIX.CustomActions.TargetName).CA.dll" />
    <CustomAction Id="RegisterDriver" BinaryKey="DriverRegistrationCA" DllEntry="RegisterAscomDriver" Execute="deferred" Return="check" />
    <CustomAction Id="UnregisterDriver" BinaryKey="DriverRegistrationCA" DllEntry="UnregisterAscomDriver" Execute="immediate" Return="check" />
    <InstallExecuteSequence>
      <Custom Action="RegisterDriver" After="InstallFinalize" />
      <Custom Action="UnregisterDriver" Before="RemoveFiles" />
    </InstallExecuteSequence>
  </Fragment>
</Wix>

我查看了互联网上的各种"如何操作"来源,它们充其量只是令人困惑,建议相互矛盾。据我所知,WIX.CustomActions.CA.dll文件是一个非托管dll,它加载.NET框架并将控制权传递给"真正的"托管自定义操作。但是,WIX.CustomActions.CA.dll并没有打包在我的MSI文件中。我已经尽我所能地举例说明了,但我看不出哪里出了问题。

请问,有人在Votive上做过这个吗?你能给我一个实际的工作例子吗?

您需要从产品到片段的引用(例如,CustomActionRef(;否则,它将被智能链接器丢弃。

根据Bob Arnson的建议,我在Product.wxs文件的顶部附近添加了以下两行:

<CustomActionRef Id="RegisterDriver"/>
<CustomActionRef Id="UnregisterDriver"/>

这似乎已经奏效了。Orca现在显示我有一个二进制表,包含我的CA dll,以及InstallExecuteSequence中的CustomAction条目。

我在网上找到的例子中没有一个提到这一要求。我想人们只是在很少或根本不了解的情况下回收公认的智慧。这就是答案,感谢鲍勃!

相关内容

  • 没有找到相关文章

最新更新