У меня есть пользовательское действие, управляемое данными, и я определяю его в собственном файле вместе с данными таблицы. Когда я запускаю свою установку, она терпит неудачу, потому что пользовательская таблица отсутствует (я проверил с помощью 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
:
Но заказной таблицы нигде не видно. Я уверен, что упускаю что-то очевидное, но я не вижу, что это такое. Не могли бы вы?
EnsureTable
для своей пользовательской таблицы: stackoverflow.com/questions/461907/ - person Yan Sklyarenko   schedule 29.07.2013