2011-09-12 21 views
7

Estoy modificando un instalador existente WiX para gestionar la actualización de una instalación existente de uno de nuestros productos. Hay varios valores cuyos valores predeterminados se especifican en propiedades. Estas propiedades se muestran al usuario para su edición y el instalador existente las escribe en un archivo de configuración personalizado.Uso de una acción personalizada de WiX para establecer el valor de una propiedad

Mi código debe ser lo suficientemente inteligente como para detectar si está realizando una instalación completamente nueva en comparación con la instalación de una versión anterior. Si está haciendo una instalación completamente nueva, necesita establecer las propiedades a los valores predeterminados. Pero si está haciendo una actualización, el código necesita recuperar el valor de esas propiedades del archivo de configuración existente y mostrarlas al usuario.

Por la lectura que he hecho, me parece que necesito usar un type 51 custom action para establecer las propiedades. Pero, ¿cómo implemento esta acción personalizada?

Estoy pensando que primero tengo que definir la acción personalizada para ponerla en la tabla de acciones personalizadas, y luego tengo que pegar una etiqueta en algún lugar para llamarla. Y luego necesito definirlo.

¿Cómo puedo hacer esto? ¿Qué sería un código de ejemplo?

Respuesta

4

Después de investigar un poco más sobre las acciones personalizadas, creo que tengo todo esto resuelto. Agregué una etiqueta < Binary> al archivo .wxs para identificar dónde reside la acción personalizada. Luego hice referencia al ID de la etiqueta binaria en CustomAction. Finalmente, agregué una etiqueta personalizada a la sección InstallExecuteSequence que hacía referencia a la etiqueta CustomAction por ID.

La etiqueta personalizada final mencionada anteriormente debe ir a la sección InstallUISequence, no a la sección InstallExecuteSequence, ya que la acción personalizada debe invocarse antes de que se muestre el cuadro de diálogo.

En cuanto a la implementación de la acción personalizada, agregué un nuevo proyecto de biblioteca de acción personalizada de C# a la solución. Allí, implementé un método, decorado con el atributo [CustomAction]. Este método usa los valores de las propiedades almacenadas en el objeto Session pasado como un parámetro para el método y determina la ruta del archivo ejecutable de la versión actual. A continuación, realiza el trabajo necesario para ubicar los valores en el archivo de configuración del programa que deben conservarse en todas las versiones y los escribe en otras propiedades para el script de actualización.

2

Lea las siguientes secciones de WiX tutorial:

  1. Extra Actions: da una visión general de cómo agregar una acción personalizada a MSI;
  2. What's Not in the Book: proporciona un ejemplo de cómo implementar una Acción personalizada en DLL.
+0

Eso es exectly lo que hice y me encontré con la solución que he publicado. –

1

Ejemplo:

[CustomAction] 
    public static ActionResult SetProperty(Session session) 
    { 
     try 
     { 
      session.Log("Begin SetProperty action"); 

      session["PROPERTY_NAME"] = "value" 


     } 
     catch (Exception exception) 
     { 
      session.Log("ERROR in custom action SetProperty {0}", exception.ToString()); 

      return ActionResult.Failure; 
     } 

     return ActionResult.Success; 
    } 
Cuestiones relacionadas