I have an MSI file being created with Wxs 3.0. My MSI references a C# custom action, written using the new C# Custom Action project.
I want to pass an argument to msiexec that gets routed to my custom action - for example:
msiexec /i MyApp.msi ENVIRONMENT=TEST#
In my .wxs file, I refer to my custom action like this:
<Property Id="ENVIRONMENT"/> <Binary Id="WixCustomAction.dll" SourceFile="$(var.WixCustomAction.Path)" /> <CustomAction Id="WixCustomAction" BinaryKey="WixCustomAction.dll" DllEntry="ConfigureSettings"/> <InstallExecuteSequence> <Custom Action="WixCustomAction" After="InstallFiles"></Custom> </InstallExecuteSequence>
My C# custom action is set up like this:
[CustomAction] public static ActionResult ConfigureSettings(Session session) { }
I was expecting to be able to access the property like this:
string environmentName = session.Property["ENVIRONMENT"];
but this doesn't seem to work.
How do I access the property I passed to msiexec in my custom action?
As I discovered at this link, TARGETDIR is actually supposed to represent the root of the drive with the most free space available (assuming there's more than one). That's why WiX projects have directories nested under there for Program Files, etc.
If instead of
<CustomAction Id="SetCustomActionDataValue" Return="check" Property="Itp.Configurator.WixCustomAction" Value="[ENVIRONMENT],G2,[CONFIGFILE],[TARGETDIR]ITP_v$(var.VERSION_MAJOR)" />
you write this:
<CustomAction Id="SetCustomActionDataValue" Return="check" Property="Itp.Configurator.WixCustomAction" Value="Environment=[ENVIRONMENT];G=G2;ConfigFile=[CONFIGFILE];TargetDir=[TARGETDIR]ITP_v$(var.VERSION_MAJOR)" />
then you will be able to reference your variables like this:
string env=session.CustomActionData["Environment"];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With