2012-07-30 19 views
5

Tengo una CustomAction bastante larga en un instalador wix, y quiero poder cambiar el texto 'Estado: ...' mientras se ejecuta la operación, para ver que hay progreso y actualización en su estado interno. Sé cómo establecer el texto de progreso de una acción personalizada, pero lo que quiero es cambiar dinámicamente el texto de progreso durante la ejecución de la acción personalizada.WiX: cambiando dinámicamente el texto de estado durante CustomAction

Respuesta

8

Acciones personalizadas diferidas pueden llamar a la función MsiProcessMessage. A continuación, puede usar INSTALLMESSAGE_ACTIONSTART, INSTALLMESSAGE_ACTIONDATA e INSTALLMESSAGE_PROGRESS para publicar mensajes en la interfaz de usuario.

Otra posibilidad sería dividir su acción personalizada en acciones personalizadas más pequeñas y usar ProgressText (tabla ActionText) para describir las diferentes fases de la instalación. (Haga que cada CA tenga una sola responsabilidad).

A veces, cuando una CA hace demasiado trabajo, es difícil planear las reversiones correctamente.

Obtaining Context Information for Deferred Execution Custom Actions

MsiProcessMessage function

Utilizando C#/DTF se ve algo como:

using (Record record = new Record(0)) 
    { 
     record.SetString(0, "foo"); 
     session.Message(InstallMessage.ActionData, record); 
    } 

La instrucción using dispone el registro para liberar el MSI subyacente maneja. La cantidad de campos en el registro y la forma de establecer los datos dependerán de la plantilla definida en la tabla ActionText.

+0

Gracias. Creo que esto es lo que estaba buscando. Mi acción personalizada está escrita en C#, ¿quizás tienes una explicación para DTF? –

+0

Todas las clases y miembros del DTF doco hacen referencia a las contrapartes subyacentes de la API MSI y puede encontrarlas utilizando la pestaña de búsqueda en el archivo de ayuda. Actualizaré mi respuesta para proporcionar una muestra. (No mencionó en qué estaba programando la CA). –

+0

Gracias. Funciona de maravilla :) –

0

Chris ha explicado correctamente la forma de enviar el mensaje de su CA a ActionData, pero si está utilizando InstallShield, asegúrese de crear una etiqueta en el cuadro de diálogo SetupProgress y suscribe el evento ActionData texto a él. Simplemente, crear un evento ActionText para una etiqueta no es suficiente, ya que solo mostrará la descripción de CA que cree en la Tabla de Texto de Acción.

Cuestiones relacionadas