modificar - metaetiqueta wix
WiX: compromete más de una Propiedad a Acción personalizada diferida (1)
En primer lugar, hay un error en la forma en que pasa los datos de la acción personalizada inmediata a la diferida. El nombre de la Property
que utiliza en la acción personalizada inmediata debe ser exactamente igual al Id
de la acción personalizada diferida. En tu caso:
<!-- immediate CA -->
<CustomAction Id=''Datenuebergabe'' Property=''DoSomething'' Value=''InstalllocVar=[INSTALLLOCATION]''/>
<!-- deferred CA -->
<CustomAction Id=''DoSomething'' BinaryKey =''myAction'' DllEntry=''DoSomething'' Impersonate=''no'' Execute=''deferred'' Return=''check'' HideTarget=''yes''/>
Esto resolverá el problema con la excepción KeyNotFound
.
Ahora, regrese a su pregunta sobre cómo pasar más de 1 valor.
Primero, en el uso inmediato de CA separador para pasar la colección nombre-valor, así:
<CustomAction Id="SetForDoSomething" Return="check" Property="DoSomething" Value="source=[ArchiveFolder][ARCHIVENAME];target=[WebsiteFolder]"/>
Como puede ver, hay dos pares de nombre-valor que pasamos a la CA diferida aquí, source
y target
. En la CA diferida, use el siguiente código para sacar esos valores:
var source = session.CustomActionData["source"];
var target = session.CustomActionData["target"];
Y eso es.
Tengo un problema con mi instalador de WiX en contacto con acciones personalizadas diferidas / inmediatas. Disculpe mi inglés.
Deseo entregar algunas propiedades, ingresadas por el usuario, a una acción personalizada diferida. Sé que necesito una acción personalizada inmediata y "CustomActionData" para hacer eso. Lo he implementado de esta manera.
El binario:
<Binary Id=''myAction'' SourceFile=''./TemplateGeneration.CA.dll''/>
La acción personalizada inmediata:
<CustomAction Id=''Datenuebergabe'' Property=''DoSomething'' Value=''InstalllocVar=[INSTALLLOCATION]''/>
La acción personalizada diferida:
<CustomAction Id=''TemplateGenerationInstallKey'' BinaryKey =''myAction'' DllEntry=''DoSomething'' Impersonate=''no'' Execute=''deferred'' Return=''check'' HideTarget=''yes''/>
InstallExecuteSequence
<InstallExecuteSequence>
<Custom Action="Datenuebergabe" Sequence="1399"/>
<Custom Action="TemplateGenerationInstallKey" Before="InstallFinalize"/>
</InstallExecuteSequence>
Llamar a la propiedad en la acción personalizada diferida:
string somedata = session.CustomActionData["InstalllocVar"];
TemplateEngineCall(somedata+"templates", "install_key_cmd", somedata+"scripts", "install_key.cmd");
Mis problemas: si trato de instalar mi programa, se rompe. Con este código, solo puedo entregar una propiedad, pero debo comprometer más de una.
Para información: cuando miro el archivo de registro, aparece System.Collections.Generic.KeyNotFoundException mientras se realiza la acción personalizada.
¿Por qué esto no funciona? Bueno, necesito la acción personalizada diferida para escribir en la "carpeta de archivos del programa". Debido a los derechos necesarios, se requiere la acción personalizada diferida y la acción personalizada inmediata ejecutada antes del diferido debería ayudar a manejar las propiedades. ¿Es posible hacer eso?
Espero que entiendas cuáles son mis problemas y que puedas intentar ayudarme.