[wix-users] Pass variables from one custom action to another
Elena Aralla
elena.aralla at gmail.com
Fri Aug 3 03:25:11 PDT 2018
Hi,
I tried without success!
I can pass data of CustomAction1 to CustomAction2 -> OK; I can change the value of session.CustomActionData["SomeCustomActionDataKey”] from 1 to 2! (see log at the end of this email)
How can I pass SomeCustomActionDataKey, defined in CustomAction1 and changed in CustomAction2 to CustomAction3 or CustomAction4 too?
This is my code:
Product.wxs:
=======================================
<Property Id="MyVar" Value="1" />
<CustomAction Id="CustomAction1"
Property="CustomAction2"
Value="SomeCustomActionDataKey=[MyVar]"/>
<Binary Id="CustomActionABin" SourceFile="$(var.CustomActionA.TargetDir)$(var.CustomActionA.TargetName).CA.dll" />
<CustomAction Id="CustomAction2"
BinaryKey="CustomActionABin"
DllEntry="CustomAction1"
Execute="deferred"
Return="check"
HideTarget="no" />
<CustomAction Id="CustomAction3"
Property="CustomAction4"
Value="SomeCustomActionDataKey=WHAT VALUE THERE??"/>
<!-- custom action - riferimento alla dll -->
<Binary Id="CustomActionBBin" SourceFile="$(var.CustomActionB.TargetDir)$(var.CustomActionB.TargetName).CA.dll" />
<CustomAction Id="CustomAction4"
BinaryKey="CustomActionBBin"
DllEntry="CustomAction1"
Execute="deferred"
Return="check"
HideTarget="no" />
<InstallExecuteSequence>
<Custom Action="CustomAction1" Before="CustomAction2" />
<Custom Action="CustomAction2" Before="CustomAction3" />
<Custom Action="CustomAction3" Before="CustomAction4" />
<Custom Action="CustomAction4" After="InstallInitialize" />
</InstallExecuteSequence>
CustomActionA
=======================================
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Deployment.WindowsInstaller;
namespace CustomActionA
{
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
session.Log("Begin CustomAction1");
session.Log("session.CustomActionData[\"SomeCustomActionDataKey\"]={0}", session.CustomActionData["SomeCustomActionDataKey"]);
session.CustomActionData["SomeCustomActionDataKey"] = "2";
session.Log("session.CustomActionData[\"SomeCustomActionDataKey\"]={0}", session.CustomActionData["SomeCustomActionDataKey"]);
return ActionResult.Success;
}
}
}
CustomActionB
=======================================
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Deployment.WindowsInstaller;
namespace CustomActionB
{
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
session.Log("Begin CustomAction1");
// this should have value=2!!
session.Log("session.CustomActionData[\"SomeCustomActionDataKey\"]={0}", session.CustomActionData["SomeCustomActionDataKey"]);
session.CustomActionData["SomeCustomActionDataKey"] = "3";
session.Log("session.CustomActionData[\"SomeCustomActionDataKey\"]={0}", session.CustomActionData["SomeCustomActionDataKey"]);
return ActionResult.Success;
}
}
}
LOG:
Begin CustomAction1A
MSI (s) (CC!88) [11:55:49:619]: Closing MSIHANDLE (162) of type 790531 for thread 17800
MSI (s) (CC!88) [11:55:49:623]: Creating MSIHANDLE (163) of type 790531 for thread 17800
session.CustomActionData=1
MSI (s) (CC!88) [11:55:49:624]: Closing MSIHANDLE (163) of type 790531 for thread 17800
MSI (s) (CC!88) [11:55:49:627]: Creating MSIHANDLE (164) of type 790531 for thread 17800
session.CustomActionData=2
MSI (s) (CC!88) [11:55:49:628]: Closing MSIHANDLE (164) of type 790531 for thread 17800
MSI (s) (CC:04) [11:55:49:641]: Closing MSIHANDLE (158) of type 790536 for thread 8404
MSI (s) (CC:D4) [11:55:49:643]: Executing op: ActionStart(Name=CustomAction4,,)
MSI (s) (CC:D4) [11:55:49:645]: Executing op: CustomActionSchedule(Action=CustomAction4,ActionType=1025,Source=BinaryData,Target=CustomAction1,CustomActionData=SomeCustomActionDataKey=)
MSI (s) (CC:D4) [11:55:49:647]: Creating MSIHANDLE (165) of type 790536 for thread 8404
MSI (s) (CC:EC) [11:55:49:649]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSIF093.tmp, Entrypoint: CustomAction1
MSI (s) (CC!B4) [11:55:49:718]: Creating MSIHANDLE (166) of type 790531 for thread 21428
SFXCA: Extracting custom action to temporary directory: C:\Users\BugFree\AppData\Local\Temp\MSIF093.tmp-\
MSI (s) (CC!B4) [11:55:49:722]: Closing MSIHANDLE (166) of type 790531 for thread 21428
MSI (s) (CC!B4) [11:55:49:772]: Creating MSIHANDLE (167) of type 790531 for thread 21428
SFXCA: Binding to CLR version v4.0.30319
MSI (s) (CC!B4) [11:55:49:775]: Closing MSIHANDLE (167) of type 790531 for thread 21428
MSI (s) (CC!B4) [11:55:49:814]: Creating MSIHANDLE (168) of type 790531 for thread 21428
Calling custom action CustomActionB!CustomActionB.CustomActions.CustomAction1
MSI (s) (CC!B4) [11:55:49:823]: Closing MSIHANDLE (168) of type 790531 for thread 21428
MSI (s) (CC!B4) [11:55:49:829]: Creating MSIHANDLE (169) of type 790531 for thread 21428
Begin CustomAction1B
MSI (s) (CC!B4) [11:55:49:832]: Closing MSIHANDLE (169) of type 790531 for thread 21428
MSI (s) (CC!B4) [11:55:49:837]: Creating MSIHANDLE (170) of type 790531 for thread 21428
session.CustomActionData=
MSI (s) (CC!B4) [11:55:49:838]: Closing MSIHANDLE (170) of type 790531 for thread 21428
MSI (s) (CC!B4) [11:55:49:841]: Creating MSIHANDLE (171) of type 790531 for thread 21428
session.CustomActionData=3
> Il giorno 02 ago 2018, alle ore 12:01, Fyodor Koryazhkin via wix-users <wix-users at lists.wixtoolset.org> ha scritto:
>
> Hi,
> The best way to pass data from one CA to another is to use properties. If
> your CA that consumes properties is deferred then all properties can be
> passed as a string in one property that has ID as your deferred action; and
> in your deferred action you retrieve that string reading CustomActionData
> property. If your properties hold sensitive data you mark them as hidden
> and you add attribute
> msidbCustomActionTypeHideTargetto your CA
>
> On Thu, Aug 2, 2018 at 12:48 PM Elena Aralla via wix-users <
> wix-users at lists.wixtoolset.org> wrote:
>
>>
>> Hi,
>>
>> I’m using the registry to exchange data between custom actions.
>>
>> For example, I have a custom action that determines the directory where to
>> install the program depending on my business rules.
>>
>> this CA writes the resulting value in the registry the custom action that
>> installs the database (I’m using SQLCE) reads from the registry the
>> directory and uses it to decide where to save the db.
>>
>> It works!
>>
>> Is there any drawback or a better way to do this?
>>
>> Thank you,
>> Elena.
>>
>> ____________________________________________________________________
>> WiX Toolset Users Mailing List provided by FireGiant
>> http://www.firegiant.com/
>
>
>
> --
> Regards,
> Fyodor Koryazhkin..
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant http://www.firegiant.com/
More information about the wix-users
mailing list