Почему моя CustomTable отсутствует в моем установщике Wix?

У меня есть пользовательское действие, управляемое данными, и я определяю его в собственном файле вместе с данными таблицы. Когда я запускаю свою установку, она терпит неудачу, потому что пользовательская таблица отсутствует (я проверил с помощью Orca, ее там нет).

Я понимаю, что на фрагмент нужно как-то ссылаться, и я отметил совет в вопросах 10339055 и 6344608< /а>.

Следуя совету в 6344608, я переместил свое определение пользовательского действия в тот же фрагмент, что и данные таблицы, например:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <?include $(sys.CURRENTDIR)\Config.wxi?>

  <Fragment>
    <CustomTable Id="AscomDeviceProfiles">
      <Column Id="ProgId" Type="string" PrimaryKey="yes" Category="Text" />
      <Column Id="ChooserName" Type="string" />

      <Row>
        <Data Column="ProgId">ASCOM.Driver.Type</Data>
        <Data Column="ChooserName">$(var.InstallName)</Data>
      </Row>

    </CustomTable>

    <!-- Define the custom actions that will process the above table data -->
    <Binary Id="binRegAscomDeviceProfiles" SourceFile="$(var.Wix.RegisterAscomDeviceProfiles.TargetDir)\$(var.Wix.RegisterAscomDeviceProfiles.TargetName).CA.dll" />
    <!-- Register and check the return code - must run as "immediate" in order to access session data -->
    <CustomAction Id="caRegisterAscomDeviceProfiles" BinaryKey="binRegAscomDeviceProfiles" DllEntry="RegisterAscomDeviceProfiles" Execute="immediate" Return="check" />
    <!-- Unregister and ignore return code (allows uninstall to succeed even if ASCOM is broken) -->
    <CustomAction Id="caUnregisterAscomDeviceProfiles" BinaryKey="binRegAscomDeviceProfiles" DllEntry="UnregisterAscomDeviceProfiles" Execute="immediate" Return="ignore" />

  </Fragment>
</Wix>

В моем файле Product.wxs я ссылаюсь на настраиваемое действие, планируя его, например так:

<InstallExecuteSequence>
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWERPRODUCTFOUND AND NOT Installed</Custom>
  <RemoveExistingProducts Before='InstallInitialize' />
  <!-- Elevate to admin if required -->
  <Custom Action='IsPrivileged' Before='LaunchConditions'>Not Privileged</Custom>
  <!-- Create ASCOM device profiles during install finalize phase, but not if already installed -->
  <Custom Action="caRegisterAscomDeviceProfiles" Before="InstallFinalize">NOT Installed</Custom>
  <!-- Remove ASCOM device profiles during uninstall (but not maintenance mode) -->
  <Custom Action="caUnregisterAscomDeviceProfiles" Before="RemoveFiles">REMOVE ~= "ALL"</Custom>
</InstallExecuteSequence>

Это правильно извлекает пользовательские действия, и двоичные файлы создаются в выходном файле MSI, как и записи InstallExecuteSequence: enter image  здесь описание введите здесь описание изображения

Но заказной таблицы нигде не видно. Я уверен, что упускаю что-то очевидное, но я не вижу, что это такое. Не могли бы вы?


person Tim Long    schedule 29.07.2013    source источник
comment
Добавьте элемент EnsureTable для своей пользовательской таблицы: stackoverflow.com/questions/461907/   -  person Yan Sklyarenko    schedule 29.07.2013
comment
Согласно ответу Роба Меншинга на один из связанных вопросов, в этом нет необходимости (таблица определенно не пуста, как вы можете видеть из источника выше). Однако я думаю, что у меня может быть проблема со сборкой, из-за которой вывод не обновляется, поэтому, возможно, я просто смотрю на старый вывод. Я опубликую обновление, когда узнаю больше.   -  person Tim Long    schedule 29.07.2013
comment
Ой, кажется, я комментировал, прежде чем внимательно прочитал текст... Извините за это.   -  person Yan Sklyarenko    schedule 29.07.2013


Ответы (1)


Я нашел проблему. В исходном коде Wix нет ничего плохого, была проблема со сборкой, из-за которой вывод не мог быть правильно перестроен.

Я полагаю, что нужно было бы удалить вопрос, поскольку это действительно отвлекающий маневр. Я не уверен, удалять его или нет, поэтому я оставлю это на усмотрение сообщества. У меня нет возражений, если кто-то хочет проголосовать за его удаление.

person Tim Long    schedule 29.07.2013
comment
Всего одно предложение. Возможно, вы захотите создать дополнительный столбец с именем Component_ и использовать функцию MsiEvaluateCondition внутри вашего пользовательского действия, а не помещать такие условия, как Not Installed / REMOVE~=ALL в вашу таблицу последовательностей. Так работают стандартные действия установщика Windows. - person Christopher Painter; 29.07.2013