Пользовательское действие не запускается, если находится в отдельном файле

Если я пишу приведенный ниже код в блоке продукта, он работает нормально, но если я пишу его в отдельном файле, он не работает.

Пожалуйста, кто-нибудь может сказать мне, почему это происходит?

Это отдельный код файла для пользовательского действия:

<?xml version="1.0" encoding="UTF-8"?>
<?include SetupDefines.wxi?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Fragment>

    <!-- The custom action DLL itself.-->
    <Binary Id="CA" SourceFile="..\bin\debug\Name.CA.dll" />

    <CustomAction Id="CustomAction1"
              BinaryKey="CA"
              DllEntry="CustomAction1"
              Execute="immediate"
              Return="check" />

    <!--Custom Actions END-->
    <InstallExecuteSequence>

      <Custom Action="CustomAction1" Before="InstallFiles">
        <![CDATA[NOT Installed]]>
      </Custom>

    </InstallExecuteSequence>
  </Fragment>
</Wix>

person Rikin Patel    schedule 12.07.2012    source источник


Ответы (2)


Компоновщик будет включать только те фрагменты, которые он обнаружит при разрешении ссылок.

Используйте элемент CustomActionRef в wxs вашего продукта, чтобы убедиться, что компоновщик включает фрагмент.

person Wim Coenen    schedule 12.07.2012
comment
Я не знал о CustomActionRef, потому что всегда использовал фиктивные свойства для извлечения фрагментов, но это решение мне нравится больше. - person BryanJ; 13.07.2012
comment
@BryanJ: фиктивные свойства по-прежнему являются полезным методом, и о них полезно знать. Я также использую его для фрагментов, которые не содержат ничего, на что можно сослаться, например. Condition. - person Wim Coenen; 13.07.2012

На ваш фрагмент не ссылается ваш проект. Вы можете добавить фиктивное свойство к своему фрагменту, а затем сослаться на свой фрагмент в основном файле проекта, как описано в этом ответе SO: WiX: извлечение CustomTable из фрагмента БЕЗ CustomAction

person BryanJ    schedule 12.07.2012