2011-12-21 12 views
10

Jestem początkujący, zacząłem uczyć się WiX. Chcę przechwytywać i sprawdzać i rejestrować dane użytkownika podczas procesu instalacji. Utworzyłem okno dialogowe do przechwytywania rejestracji użytkownika i wywoływania akcji niestandardowej, gdy użytkownik kliknie przycisk "Dalej".Błąd instalacji WiX 2762 podczas wywoływania CustomAction z okna dialogowego

Ale tutaj dostaję błąd instalatora 2762. Chociaż opis błędu mówi, że "akcja musi być zaplanowana między InstallInitialize i InstallFinalize", nie jestem w stanie wymyślić, jak rozwiązać ten problem.

Oto mój skrypt 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> 

Poniżej kodu niestandardowego działania użyłem.

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

Niestandardowa akcja działa poprawnie, jeśli jest używana w "InstallExecuteSequence". Nie jestem w stanie rozwiązać problemu, usunąłem niestandardowe okno dialogowe i użyłem następującego prostego wywołania, aby wywołać akcję niestandardową. Ale skończyłem z tym samym błędem.

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

Jestem pewien, że robię tu coś głupiego, ale nie mogłem się zorientować. Jakie jest rozwiązanie?

Odpowiedz

20

W swojej CustomAction elementu ustawić Execute atrybut immediate. Deferred actions może działać tylko w InstallExecuteSequence między działaniami InstallInitialize i InstallFinalize.

+0

Pracował jak urok. Dziękuję Ci!!! – user961330