2011-12-21 12 views
10

Soy un principiante, comencé a aprender WiX. Quiero capturar y validar y registrar detalles del usuario durante el proceso de instalación. He creado un diálogo para capturar el registro de usuario e invocar una acción personalizada una vez que el usuario hace clic en 'Siguiente'.Error de instalación de WiX 2762 al invocar una acción personalizada desde el diálogo

Pero aquí obtengo el error de instalador 2762. Aunque la descripción del error dice que "La acción debe programarse entre InstallInitialize e InstallFinalize", no puedo encontrar la manera de resolver este problema.

Aquí está mi script 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> 

siguiente es el código de acción personalizada que he usado.

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

La acción personalizada funciona bien si se usa en "InstallExecuteSequence". No puedo resolver el problema, eliminé el cuadro de diálogo personalizado y usé la siguiente llamada simple para invocar una acción personalizada. Pero terminé con el mismo error.

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

Estoy seguro de que estoy haciendo algo tonto aquí, pero no pude entenderlo. ¿Cuál es la solución?

Respuesta

20

En su CustomAction Conjunto de elementos de Ejecutar atributo a immediate. Deferred actions solo se puede ejecutar en InstallExecuteSequence entre las acciones InstallInitialize e InstallFinalize.

+0

Funcionó como el encanto. ¡¡¡Gracias!!! – user961330

Cuestiones relacionadas