2012-07-05 11 views
8

Deseo realizar una acción personalizada después de copiar los archivos en la carpeta de destino.Cómo llamar a una acción personalizada después de los archivos copiados en wix

En una acción personalizada, ejecuto un archivo de script copiado, así que denme el archivo de error no encontrado.

<CustomAction Id="RunDBScript" 
       BinaryKey="CA" 
       DllEntry="RunDBScript" 
       Execute=" immediate" 
       Return="check" /> 


<Custom Action="RunDBScript" After="InstallFiles"> 
    <![CDATA[NOT Installed]]> 
    </Custom> 

esta acción personalizada da un error archivo/directorio no encontrado. entonces esta acción de llamada antes de copiar archivo.

Entonces, ¿cómo llamar a la acción personalizada después de la copia de archivo?

No entiendo por qué esta acción personalizada llama antes de InstallFiles aunque estoy especificado After = "InstallFiles".

+0

hacer su CA diferida: 'Ejecutar = "diferido"' –

+1

si uso Ejecutar = "diferido" entonces dame de error: "No se puede acceder detalles de la sesión de una acción personalizada no inmediata" –

+4

Cómo se hizo resolver su problema? – guiomie

Respuesta

4

Cuando utiliza acciones personalizadas diferidas, debe acceder a valores a través de session.CustomActionData ["propertyname"].

Los valores del diccionario de sesión solo se pueden leer mediante acciones personalizadas inmediatas, donde se está escribiendo el script de ejecución.

Las acciones personalizadas diferidas se ejecutan en el tiempo de ejecución del script, por lo que las propiedades del proyecto ya no están disponibles. Para utilizarlo, debe implementar una doble acción personalizada para proporcionar las propiedades deseadas para la acción personalizada real.

Sigue el ejemplo que sigue:

<CustomAction Id="CustomActionID_Data" Property="CustomActionID" Value="INSTALLDIR=[INSTALLDIR];OTHERPROPERTY=[OTHERPRPJECTPROPERTY]"></CustomAction> 
<CustomAction Id="CustomActionID" BinaryKey="FILEBINARYID" DllEntry="METHODNAMEATCUSTOMACTION" Execute="deferred"></CustomAction> 

En este ejemplo, es necesario llamar al InstallExecutionSequence la acción personalizada "_data" y después de la llamada de la real, por lo que la primera "_data" voluntad sí las propiedades deseadas . Luego puede acceder a esas propiedades en su código utilizando session.CustomActionData [""].

Simplemente complementando, a continuación se muestra un ejemplo de cómo llamar a las acciones personalizadas en InstallExecuteSequence.

<Custom Action="CustomActionID_Data" After="InstallFiles">NOT (REMOVE="ALL")</Custom> 
<Custom Action="CustomActionID" After="CustomActionID_Data">NOT (REMOVE="ALL")</Custom> 
Cuestiones relacionadas