2011-09-05 12 views
25

que tienen una acción personalizada y la necesidad de conseguir debajo de los valores para copiar algunas partes de la carpeta de instalación a la carpeta VS2010¿Hay alguna forma alternativa de acceder a los detalles de la sesión en acciones personalizadas diferidas?

  1. ruta del directorio VS2010 (VS2010DEVENV propiedad)
  2. Ruta de instalación (INSTALLLOCATION propiedad)

Para otorgar suficientes privilegios, configuré una acción personalizada como Execute='deferred' Impersonate='no'. Sin embargo, cuando se ejecuta el instalador, se registra el mensaje:

No se puede acceder a detalles de la sesión de una acción personalizada no inmediato

Parece que no podemos acceder a una propiedad en una acción personalizada "diferido" (es decir, session["VS2010DEVENV"])

¿Hay alguna otra manera para que pueda recuperar esos valores según sea necesario?

Respuesta

28

This debe ser útil. Preste especial atención a la parte inferior de la página, una guía de 2 pasos sobre cómo pasar valores a través del CustomActionData.

Aquí está el extracto:

para escribir el valor de una propiedad en el script de instalación para su uso durante una diferida acción personalizada ejecución:

  1. insertar un pequeño acción personalizada en la instalación secuencia que establece la propiedad de interés para una propiedad que tiene el mismo nombre que la acción personalizada de ejecución diferida. Por ejemplo, si la clave principal para la acción personalizada de ejecución diferida es "MiAcción", establezca una propiedad llamada "MiAcción" en la propiedad X que necesita recuperar. Usted debe establecer la propiedad "MiAcción" en la secuencia de instalación antes de la acción personalizada "MiAcción". Aunque cualquier tipo de acción personalizada puede configurar los datos de contexto, el método más simple es usar una acción personalizada de asignación de propiedades (por ejemplo, Tipo de acción personalizada 51).
  2. En el momento en que se procesa la secuencia de instalación, el instalador escribirá el valor de la propiedad X en el script de ejecución como el valor de la propiedad CustomActionData.
+3

Gracias por la [referencia ] (http://msdn.microsoft.com/en-us/library/aa370543.aspx). La propiedad ** CustomActionData ** funciona bien. Pero me pregunto cómo podemos pasar más de un valor. En mi caso, necesito tanto VS2010 como los valores de la carpeta de instalación. ¿Puedes dar algunas pistas si es posible? – jcha

+11

Tendrá que analizar la cadena que pasa en la acción personalizada diferida. Por ejemplo, puede pasar '[VS2010DEVENV] | [INSTALLLOCATION]', y dividir CustomActionData por '|' en CA diferida. Si usa DTF para su CA, tiene una propiedad CustomActionData tipo diccionario, y puede pasarla como 'vs2010 = [VS2010DEVENV]; location = [INSTALLLOCATION]', y obtenerla como 'session.CustomActionData [" vs2010 "] 'y' session.CustomActionData ["location"] ' –

+0

¡Genial! Soluciona totalmente mi caso. Muchas gracias por tus consejos. – jcha

11

Detalles adicionales: múltiples valores de las propiedades se pueden transmitir utilizando la siguiente sintaxis en una "acción personalizada Tipo 51" (que es básicamente una acción personalizada que establece un valor de propiedad):

PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=... 

los valores pueden ser recuperados desde dentro de la acción personalizada como esto:

string prop1 = session.CustomActionData["PROPERTY1"]; 
string prop2 = session.CustomActionData["PROPERTY2"]; 

He aquí un ejemplo que establece valores de propiedad para una acción personalizada con ID "MyCustomAc ción ":

<CustomAction 
    Id="SetCustomActionPropertyValues" 
    Property="MyCustomAction" 
    Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" /> 

(leer this MSDN article para más detalles sobre la sintaxis formato que en este ejemplo se utiliza para recuperar la ubicación de instalación de un archivo con ID 'MyExecutableFile')

+4

Muchas gracias por el ejemplo concreto. Justo lo que necesitaba. Los futuros visitantes también deberían ver [esta respuesta] (http://stackoverflow.com/a/11233268/660536) para obtener más detalles y ejemplos. – GazTheDestroyer

Cuestiones relacionadas