Я пытался использовать пользовательскую dll для проверки регистрационного номера, введенного пользователем, но я каждый раз сталкиваюсь с «магическим» поведением.В примерах учебника http://wix.tramontana.co.hu/tutorial/events-and-actions/whats-not-in-the-book настраиваемое действие выполняется после «CostFinalize», которое обычно должно выполняться перед процедурой копирования файла, но оказывается, что действие выполняется до появления самого первого диалогового окна с лицензионным соглашением.Я попытался решить эту проблему, назначив действие при событии нажатия кнопки «Далее» при регистрации. Диалог
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="DoAction" Value="CheckingPID">1</Publish>
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>
...
<CustomAction Id="CheckingPID" BinaryKey="CheckPID" DllEntry="CheckPID" />
<Binary Id="CheckPID" SourceFile="serialcheck.dll" />
В dll, использование MsiGetProperty (hInstall, "PIDKEY", Pid, &PidLen);
не получает значение PIDKEY из msi, указанного вMySerialCheckDlg UI
<Control Id="CDKeyEdit" Type="Edit" X="45" Y="159" Width="220" Height="16" Property="PIDKEY" Text="[PIDTemplate]" />
И в MSI свойство PIDACCEPTED не проверяется в строке
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>
Таким образом, InvalidPidDlg не появляется, и процесс установки продолжается дальше.
Можете ли вы указать порядок последовательности действий WiX или указать любой другой подход, который можно использовать в этой ситуации.