Не удается настроить пользовательское действие Wix для работы в Votive / VS2010 - PullRequest
1 голос
/ 29 апреля 2011

Помощь!Мне нужно выполнить управляемое настраиваемое действие в моем проекте установки Wix 3.5, и независимо от того, что я пробовал, я не могу заставить его работать.

Я использую интеграцию Votive в Visual Studio 2010. МойФайл Wix Product.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к истине.Проект называется WIX.CustomActions и производит WIX.CustomActions.dll и WIX.CustomActions.CA.dll

. Я вижу, что Wix обрабатывает ссылку во время сборки, а сборка WIX.CustomActions.dll отображается в двоичной таблице в окончательном проекте установки,но 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>

Я посмотрел на различные источники 'howto' наи они в лучшем случае сбивают с толку противоречивыми советами.Насколько я понимаю, файл WIX.CustomActions.CA.dll - это неуправляемая библиотека DLL, которая загружает платформу .NET и передает управление «реальным» управляемым настраиваемым действиям.Однако WIX.CustomActions.CA.dll не входит в мой файл MSI.Я следил за примерами, как мог, но я не вижу, что не так.

Пожалуйста, кто-нибудь работает в Votive?Можете ли вы дать мне реальный рабочий пример?

Ответы [ 2 ]

4 голосов
/ 29 апреля 2011

Вам нужна ссылка (например, CustomActionRef) из вашего продукта на фрагмент;в противном случае он удаляется интеллектуальным компоновщиком.

1 голос
/ 30 апреля 2011

Следуя предложению Боба Арнсона, я добавил следующие две строки в верхней части моего файла Product.wxs:

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

Кажется, это сработало. Orca теперь показывает, что у меня есть двоичная таблица, содержащая мою CA-библиотеку, и запись CustomAction в InstallExecuteSequence.

Ни один из примеров, которые я нашел в Интернете, не упомянул это требование. Я думаю, что люди просто перерабатывали, получали мудрость, почти или совсем не понимая. Так вот ответ, спасибо Бобу!

...