¿Cómo se recuperan las propiedades establecidas en CustomActionData mediante una acción personalizada diferida?¿Cómo pasar CustomActionData a CustomAction usando WiX?
Respuesta
Las acciones personalizadas diferidas no pueden acceder directamente a las propiedades del instalador (reference). De hecho, sólo CustomActionData
propiedad
session.CustomActionData
y otros métodos y propiedades listadas here están disponibles en el objeto de sesión.
Por lo tanto, para una acción personalizada diferida para recuperar una propiedad como INSTALLLOCATION
, debe usar una acción personalizada tipo 51, es decir, una acción personalizada de conjunto de propiedades, para pasar esa información y consumirá los datos desde el código C# de CustomAction hasta session.CustomActionData
. (Ver reference & reference)
A continuación se muestra un ejemplo de una acción personalizada de tipo 51 (CustomAction1
) que va a establecer una propiedad que puede ser recuperada en CustomAction2
.
<CustomAction Id="CustomAction1"
Property="CustomAction2"
Value="SomeCustomActionDataKey=[INSTALLLOCATION]"
/>
en cuenta que Property
nombre del atributo es CustomAction2
. Esto es importante. El valor del atributo de propiedad de la acción tipo 51 debe ser igual/idéntico al nombre de la acción personalizada que está consumiendo CustomActionData
. (ver reference)
Aviso el nombre SomeCustomActionDataKey
en el Value
par atributo clave/valor? En su código C# en la acción personalizada que consume (CustomAction2
), usted se verá en marcha dicha propiedad de CustomActionData
utilizando la siguiente expresión:
string somedata = session.CustomActionData["SomeCustomActionDataKey"];
La clave que se utiliza para recuperar el valor de CustomActionData
NO es el valor en el atributo Property
de la acción personalizada tipo 51, pero la clave del par key=value
en el atributo Value
. (llevar Importante:. CustomActionData
se rellena mediante el establecimiento de una propiedad instalador que tiene el mismo nombre que el ID de la acción personalizada que consume, pero CustomActionData
claves no se instalador propiedades) (ver reference)
En nuestro escenario, el consumo de acción personalizada es una acción personalizada diferida se define algo como el siguiente:
<Binary Id="SomeIdForYourBinary" SourceFile="SomePathToYourDll" />
<CustomAction Id="CustomAction2"
BinaryKey="SomeIdForYourBinary"
DllEntry="YourCustomActionMethodName"
Execute="deferred"
Return="check"
HideTarget="no"
/>
Configuración del InstallExecuteSequence
Por supuesto, el consumir acción personalizada (CustomAction2
) debe ejecutarse después de la acción personalizada tipo 51 (CustomAction1
). Por lo que usted tiene que programar como esto:
<InstallExecuteSequence>
<!--Schedule the execution of the custom actions in the install sequence.-->
<Custom Action="CustomAction1" Before="CustomAction2" />
<Custom Action="CustomAction2" After="[SomeInstallerAction]" />
</InstallExecuteSequence>
Para nosotros schlubs C++, se recupera la propiedad como sigue:
MsiGetProperty(hInstall, "CustomActionData", buf, &buflen);
A continuación, analizar sintácticamente 'buf'. Gracias a Bondbhai.
Si el valor pasado a la acción personalizada no es un juego de llaves/par ...
es decir
<SetParameter Id="CustomAction1" Before="CustomAction1" Value="data" Sequence="execute"/>
<CustomAction Id="CustomAction1" BinaryKey="BinaryId" DllEntry="MethodName" Execute="deferred"/>
... entonces todo el blob se pueden recuperar usando:
string data = session["CustomActionData"];
- 1. WiX CustomActionData está vacío en la llamada CustomAction
- 2. WiX - Pasar parámetros a una CustomAction (DLL)
- 3. WIX CustomAction - cómo obtener más información en la instalación/registro
- 4. .NET Setup Project: Cómo pasar varios campos CustomActionData
- 5. WiX: cambiando dinámicamente el texto de estado durante CustomAction
- 6. no puedo pasar propiedades a la acción personalizada de WiX
- 7. WiX: Pasando Instalar ruta de acceso a la acción personalizada administrada
- 8. Pasar varios valores a la propiedad Wix DefineConstants con MSBuild
- 9. Instalador MSI llamando a otro instalador MSI en modo silencioso usando WiX
- 10. Cerrar una aplicación usando WiX
- 11. ¿Cómo transfiero las propiedades de msiexec a una acción personalizada de WiX C#?
- 12. Error 2896 usando un WiX C#/.NET acción personalizada 4
- 13. Cómo pasar Drawable usando Parcelable
- 14. Cómo pasar ArrayList usando putStringArrayListExtra()
- 15. Crear un acceso directo de escritorio a una CARPETA existente usando WiX
- 16. ¿Puedo establecer una licencia personalizada usando WiX?
- 17. WIX C++ acción personalizada
- 18. Propiedad de WiX Referencia Otra propiedad
- 19. Establecer la versión ASP.Net usando WiX
- 20. Usando IMultiValueConverter pasar múltiples CommandParameters a viewmodel
- 21. ¿Cómo pasar el parámetro a un servicio web usando ksoap2?
- 22. ¿Cómo pasar de una página a otra usando javascript?
- 23. ¿Cómo pasar una matriz usando PHP y Ajax a Javascript?
- 24. No se puede registrar DLL usando WiX
- 25. ¿Agregar valor de registro multiString usando WiX?
- 26. ¿Cómo instalo con permisos elevados usando un instalador de WiX?
- 27. Copiar varios archivos usando comodines/recursivamente usando Wix
- 28. Generar un archivo ejecutable usando wix
- 29. ¿Cómo usar módulos de combinación configurables en Wix?
- 30. Cómo pasar argumentos usando std :: mem_fun
Alexey, gracias por tomarse el tiempo para escribir esto. Esto ha sido una gran ayuda para mí. Lamentablemente, solo puedo darte +1 ... –
Como dijo @TimLong, muchas gracias. Ojalá pudiera +1 esto muchas, muchas veces. –
No lo entendí hasta que realmente lo ejecuté. Entonces vi la lógica. Forma de poca información buena legible sobre este tema. ¡Gracias! – Wolf5