[wix-users] how to pass multiple arguments to C# custom action
sampat magi
ssmcs060 at gmail.com
Fri Apr 29 09:47:05 PDT 2016
I think no need to create immediate CA that in turn sets property which is
CA name. And again sequencing it in somewhere.
<SetProperty /> element should do it all for u in the background.
On Apr 29, 2016 10:11 PM, "KONDURU Pavan" <Pavan.KONDURU at 3ds.com> wrote:
> Hi Ian,
>
> This is how I pass multiple variables to my CAs, hope this helps. It's
> pretty simple:
>
> In my product.wxs
>
> <CustomAction Id="SetPropertyMyserver" Property="UpdateMyProps"
> Value="[INSTALLLOCATION],[DISCO_HOSTNAME],[CONFIG_SERVERPORT]"
> Execute="immediate"/>
> <CustomAction Id="UpdateMyProps" BinaryKey="CustomAction"
> DllEntry="UpdateDiscoProps" Return="check" Execute='deferred'
> Impersonate='no'/>
>
> <Custom Action="SetPropertyMyserver" Before="UpdateMyProps"></ Custom>
> <Custom Action="UpdateMyProps" After="someCA"></Custom>
>
> In my CA code:
>
> String customData = session["CustomActionData"];
>
> Record record = new Record(1);
>
> string[] valueArg = customData.Split(',');
> string location = valueArg[0];
> string hostname = valueArg[1];
> string port = valueArg[2];
>
>
> --Pavan
> -----Original Message-----
> From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf
> Of Ian Bell
> Sent: Thursday, April 28, 2016 10:07 PM
> To: 'WiX Toolset Users Mailing List'
> Subject: [wix-users] how to pass multiple arguments to C# custom action
>
> I am following an example in Nick Ramirez's book Wix 3.6 on how to pass
> multiple arguments to a C# custom action. I can successfully pass a
> single
> argument but not multiple argument. The end of log file shows
> 'myDeferredCA' property is correctly defined but
> 'session.CustomActionData.Values' is always empty in my custom action. I
> am obviously missing something simple and am hoping someone here can spot
> my
> 'hiccup'. The 'session.CustomActionData.Values' should appear between the
> log entries 'Begin myDeferredCA' and 'End myDeferredCA' but the values
> 'abc123', 'def567' and 'ghi890' never appear between these two log entries.
> Can anyone spot what I am doing wrong?
>
> ThanX in advance.
>
> Ian
>
>
>
>
>
> CustomAction.cs
> ======================================================================
> namespace CustomAction1
> {
> public class CustomActions
> {
> [CustomAction]
> public static ActionResult myDeferredCA( Session session )
> {
> //Debugger.Launch();
> session.Log( "Begin myDeferredCA" );
>
> ICollection<string> values =
> session.CustomActionData.Values;
> foreach( var value in values ) {
> session.Log( "value = {0}", value );
> }
>
> session.Log( "End myDeferredCA" );
> return ActionResult.Success;
> }
> }
> }
>
>
>
> Product.wxs
> ======================================================================
> <?xml version="1.0" encoding="UTF-8"?>
> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
>
> <Product Id="*" Name="_MySetupProject" Language="1033" Version="1.0.0.0"
> Manufacturer="MyCompany"
> UpgradeCode="b0d199cd-d214-4e68-95c0-ecf3aa2d0b0d">
> <Package InstallerVersion="200" Compressed="yes"
> InstallScope="perMachine" />
> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName]
> is already installed." />
> <MediaTemplate EmbedCab="yes"/>
>
> <Property Id="PROP1" Value="abc123" />
> <Property Id="PROP2" Value="def567" />
> <Property Id="PROP3" Value="ghi890" />
> <CustomAction Id="CustomActionId_SetProperties"
> Property="myDeferredCA"
> Value="Prop1=[PROP1];Prop2=[PROP2];Prop3=[PROP3]" />
>
> <Binary Id="BinaryId_MyCustomActionsDLL"
>
>
> SourceFile="$(var.CustomAction1.TargetDir)$(var.CustomAction1.TargetName).ca
> .dll" />
> <CustomAction Id="CustomActionId_MyCustomAction"
> BinaryKey="BinaryId_MyCustomActionsDLL"
> DllEntry="myDeferredCA"
> Execute="deferred"
> Return="check"/>
>
> <InstallExecuteSequence>
> <Custom Action="CustomActionId_SetProperties"
> Before="CustomActionId_MyCustomAction" />
> <Custom Action="CustomActionId_MyCustomAction"
> After="InstallInitialize" />
> </InstallExecuteSequence>
>
> <Feature Id="ProductFeature" Title="My Setup Project 01" Level="1">
> <ComponentGroupRef Id="ComponentGroupId_ProgramFilesFolder" />
> </Feature>
> </Product>
>
> <Fragment>
> <Directory Id="TARGETDIR" Name="SourceDir">
> <Directory Id="ProgramFilesFolder">
> <Directory Id="DirectoryId_ProgramFilesFolder" Name="MyCompany" />
> </Directory>
> </Directory>
> </Fragment>
>
> <Fragment>
> <ComponentGroup Id="ComponentGroupId_ProgramFilesFolder"
> Directory="DirectoryId_ProgramFilesFolder">
> <Component Id="ComponentId_MyApplication" Guid="*" >
> <File Id="FileId_MyApplication"
> Source="$(var.MyApplication.TargetPath)" />
> </Component>
> </ComponentGroup>
> </Fragment>
>
> </Wix>
>
>
>
> MySetuProject.log
> ======================================================================
> Calling custom action
> CustomAction1!CustomAction1.CustomActions.myDeferredCA
> Begin myDeferredCA
> End myDeferredCA
> MSI (s) (F0:90) [00:57:42:380]: Executing op:
> ActionStart(Name=ProcessComponents,Description=Updating component
>
>
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant
> http://www.firegiant.com/
> This email and any attachments are intended solely for the use of the
> individual or entity to whom it is addressed and may be confidential and/or
> privileged.
>
> If you are not one of the named recipients or have received this email in
> error,
>
> (i) you should not read, disclose, or copy it,
>
> (ii) please notify sender of your receipt by reply email and delete this
> email and all attachments,
>
> (iii) Dassault Systemes does not accept or assume any liability or
> responsibility for any use of or reliance on this email.
>
> For other languages, go to http://www.3ds.com/terms/email-disclaimer
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant
> http://www.firegiant.com/
>
More information about the wix-users
mailing list