WiX - ангажирайте повече от едно свойство към отложено персонализирано действие

Имам проблем с моя WiX инсталатор в контакт с отложени/незабавни персонализирани действия. Моля, извинете моя английски.

Искам да предам някои свойства, въведени от потребителя, на отложено персонализирано действие. Знам, че имам нужда от незабавно персонализирано действие и „CustomActionData“, за да направя това. Прилагам го по този начин.

двоичният файл:

<Binary Id='myAction'  SourceFile='.\TemplateGeneration.CA.dll'/>

Незабавното персонализирано действие:

<CustomAction Id='Datenuebergabe' Property='DoSomething' Value='InstalllocVar=[INSTALLLOCATION]'/>

Отложеното персонализирано действие:

<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>

Извикване на свойството в отложеното персонализирано действие:

string somedata = session.CustomActionData["InstalllocVar"];
TemplateEngineCall(somedata+"templates", "install_key_cmd", somedata+"scripts", "install_key.cmd");

Моите проблеми: Ако се опитам да инсталирам моята програма, тя се поврежда. С този код мога да предам само едно свойство, но трябва да ангажирам повече от едно.

За информация: Когато погледна регистрационния файл, има System.Collections.Generic.KeyNotFoundException, докато извикването на персонализирано действие.

Защо това не работи? Е, имам нужда от отложеното персонализирано действие, за да запиша в "папката с програмни файлове". Поради необходимите права се изисква отложеното персонализирано действие и незабавното персонализирано действие, изпълнено преди отложеното, трябва да помогне за обработката на свойствата. Възможно ли е да се направи това?

Надявам се, че разбирате какви са проблемите ми и е възможно да се опитате да ми помогнете.


person Schneckschjen    schedule 28.10.2013    source източник


Отговори (1)


Първо, има грешка в начина, по който предавате данните от незабавното персонализирано действие към отложеното. Името на Property, което използвате в незабавното персонализирано действие, трябва да е точно същото като Id на отложеното персонализирано действие. Във вашия случай:

<!-- 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'/>

Това ще разреши проблема с KeyNotFound изключение.

Сега да се върнем към въпроса ви как да предадете повече от 1 стойност.

Първо, в непосредствения CA използвайте разделител ;, за да прехвърлите колекцията име-стойност, като това:

<CustomAction Id="SetForDoSomething" Return="check" Property="DoSomething" Value="source=[ArchiveFolder][ARCHIVENAME];target=[WebsiteFolder]"/>

Както можете да видите, има 2 двойки име-стойност, които предаваме на отложения CA тук, source и target. В отложения CA използвайте следния код, за да извадите тези стойности:

var source = session.CustomActionData["source"];
var target = session.CustomActionData["target"];

И това е.

person Yan Sklyarenko    schedule 28.10.2013
comment
Благодаря, има смисъл и в момента изглежда, че работи. Но в коя последователност трябваше да извикам незабавното персонализирано действие, за да се стартира след инсталирането на файловете? Има ли начин това да се приложи? - person Schneckschjen; 28.10.2013
comment
Незабавното действие не може да започне след инсталиране на файловете. Ето защо се нарича незабавен - изпълнява се незабавно, когато агентът на Windows Installer стигне до него по време на обработка. Непосредствените CA са проектирани да събират информация от системата, средата и потребителя, по избор да я валидират и да я предават към отложената последователност за реално изпълнение. Непосредственият CA никога не трябва да променя състоянието на целевата система. - person Yan Sklyarenko; 28.10.2013
comment
След това зависи от отложеното действие, че файлът, който е необходим за инсталиране на шаблоните, не е намерен.. хм.. - person Schneckschjen; 28.10.2013
comment
@YanSklyarenko как да изпрати обратно стойността на Wix от CustomAction ‹Property Id=RESTART Secure=yes Value=false /› - person asvignesh; 04.08.2017
comment
@asvignesh, мисля, че това заслужава отделен въпрос, тъй като не е обхванато от този. - person Yan Sklyarenko; 07.08.2017
comment
@YanSklyarenko stackoverflow.com/questions/45548586/ - person asvignesh; 07.08.2017