Ошибка установки WiX 2762 при вызове CustomAction из диалога - PullRequest
15 голосов
/ 21 декабря 2011

Я новичок, начал изучать WiX. Я хочу собирать, проверять и регистрировать данные пользователя в процессе установки. Я создал диалоговое окно для регистрации пользователя и вызова специального действия, когда пользователь нажимает «Далее».

Но здесь я получаю ошибку установщика 2762. Хотя в описании ошибки говорится, что «действие должно быть запланировано между InstallInitialize и InstallFinalize», я не могу выяснить, как решить эту проблему.

Вот мой XML-скрипт:

<Binary Id="mycustom"
        SourceFile="..\CustomAction1\bin\Debug\CustomAction1.CA.dll" />

<CustomAction Id="myCustomValidate"
              BinaryKey="mycustom"
              DllEntry="ValidateCustomAction"
              Execute="deferred"
              Return="check">
</CustomAction>

<UI>
    <UIRef Id="WixUI_Mondo" />
    <Dialog Id="UserRegistrationDlg"
            Width="370"
            Height="270"
            Title="[ProductName] [Setup]"
            NoMinimize="yes">
        ..
        ..
        ..
        <Control Id="Next"
                 Type="PushButton"
                 X="236"
                 Y="243"
                 Width="56"
                 Height="17"
                 Default="yes"
                 Text="[ButtonText_Next]">
            <Publish Event="ValidateProductID" Value="0">1</Publish>
            <Publish Event="DoAction" Value="myCustomValidate">1</Publish>
            <Publish Event="SpawnDialog" Value="InvalidRegDlg">PIDACCEPTED = "0"</Publish>
            <Publish Event="NewDialog" Value="SetupTypeDlg">ProductID AND PIDACCEPTED = "1"</Publish>
        </Control>
    </Dialog>
</UI>

Ниже приведен код пользовательского действия, который я использовал.

[CustomAction]
public static ActionResult ValidateCustomAction(Session session)
{
    return ActionResult.Success;
}

Пользовательское действие работает нормально, если используется в «InstallExecuteSequence». Я не могу выяснить проблему, я удалил пользовательское диалоговое окно и использовал следующий простой вызов, чтобы вызвать пользовательское действие. Но я закончил с той же ошибкой.

<Publish Dialog="LicenseAgreementDlg"
         Control="Next"
         Event="DoAction"
         Value="myCustomValidate">1</Publish>

Я уверен, что я делаю что-то глупое, но не могу понять. Какое решение?

1 Ответ

32 голосов
/ 21 декабря 2011

В вашем CustomAction элементе установлен Выполните атрибут в immediate. Отложенные действия могут выполняться только в InstallExecuteSequence между действиями InstallInitialize и InstallFinalize.

...