проверка введенного пользователем регистрационного номера - PullRequest
2 голосов
/ 18 августа 2011

Я пытался использовать пользовательскую 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 или указать любой другой подход, который можно использовать в этой ситуации.

1 Ответ

2 голосов
/ 18 августа 2011

Существует две последовательности: InstallExecuteSequence и InstallUISequence. Если MSI работает с полным пользовательским интерфейсом, он выполняет действия с InstallUISequence; если пользовательский интерфейс не отображается, эти действия пропускаются. Действия с InstallExecuteSequence выполняются в процессе установки, с пользовательским интерфейсом или без него.

Прежде всего, ваше свойство PIDKEY связано с элементом управления редактирования? Вам нужно что-то подобное в диалоговом окне, где вы просите пользователей ввести PIDKEY:

<Control Id="PidKeyEdit" Type="Edit" X="45" Y="105" Width="220" Height="18" Property="PIDKEY" Text="{80}" />

Type может быть либо Edit, либо MaskedEdit. Publish элементы должны быть связаны с Кнопка управления в диалоговом окне:

<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17"
         Default="yes" Text="Next">
    <Publish Event="DoAction" Value="CheckingPID">1</Publish>
    <Publish Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>
</Control>

Запустите установку с подробным ведением журнала, чтобы увидеть, как выполняются действия и как меняются значения свойств:

msiexec /i your-product.msi /lv* your-product.log
...