2011-04-20 9 views

Respuesta

15

Para acceder a una propiedad de WiX, como las establecidas con el elemento de propiedad, use el indexador del objeto de sesión . Aquí hay un ejemplo:

[CustomAction] 
public static ActionResult CustomAction1(Session session) 
{ 
string myProperty = session["MY_PROPERTY"]; 
return ActionResult.Success; 
} 

Establecer las propiedades es igual de fácil. Establecerá el valor haciendo referencia a la clave con el nombre de su propiedad. Aquí hay un ejemplo:

[CustomAction] 
public static ActionResult CustomAction1(Session session) 
{ 
session["MY_PROPERTY"] = "abc"; 
return ActionResult.Success; 
} 

Si la propiedad no existe cuando la configura, se creará. Del mismo modo, puede borrar una propiedad estableciendo su valor en nulo. Crear o cambiar los valores de propiedad desde una acción personalizada no impide que el instalador muestre esas propiedades en el registro de instalación. Por lo tanto, si una propiedad contiene información que debería estar oculta, es mejor que lo declare en su marcado WiX primero y establezca su atributo Oculto en "sí".

<Property Id="MY_PROPERTY" Hidden="yes" /> 
0

No puede. Solo Win32 DLL y VBScript Inmediato acciones tienen acceso de escritura a las propiedades del instalador. Cualquier otro tipo de acción personalizada solo puede recibir propiedades a través de su línea de comando oa través de CustomActionData.

Aquí hay un tutorial para una acción de C++ DLL personalizada: http://www.codeproject.com/KB/install/msicustomaction.aspx

para obtener y establecer las propiedades de Windows Installer puede utilizar MsiGetProperty() y MsiSetProperty().

+0

¿Qué pasa si está usando DFT, sin embargo, para escribir su CA administrada? –

+1

Sí, la respuesta es correcta, pero solo parcialmente correcta. Las clases de instalador (de Visual Studio) no pueden acceder a las propiedades, ya que no hay referencias ni remotos del identificador del instalador. Sin embargo, las soluciones de acción personalizada mejor administradas proporcionan acceso, ya sea a través de abstracciones como Session ["property"] o a través de P/Invoke directo en el identificador de Installer. –

Cuestiones relacionadas