How do I create custom actions and link it to my WiX setup project?
I have:
- WiX 3.11
- Visual Studio
You need to create a new C# Custom Action Project for WiX v3 in your solution.
That should look like this:
using System; using System.Collections.Generic; using System.Text; using Microsoft.Deployment.WindowsInstaller; namespace CustomAction { public class CustomActions { [CustomAction] public static ActionResult CustomAction(Session session) { session.Log("Begin CustomAction"); return ActionResult.Success; } } } Change the function name to a name that fits your function.
After that right click on the References Folder on your WiX setup project and choose Add Reference... .
Click the tab Projects and choose your custom action Project.
For the last step you need to add this code to your Product.wxs:
<Binary Id="CustomActionBinary" SourceFile="$(var.CUSTOMACTIONSNAME.TargetDir)$(var.CUSTOMACTIONSNAME.TargetName).CA.dll" /> <CustomAction Id="CUSTOMACTIONAME" Impersonate="no" BinaryKey="CustomActionBinary" DllEntry="CUSTOMACTIONFUNCTION" Return="check" /> You only need to change a few names here:
Thats it.
If you now want to call the custom action in your setup project, you only need to create a "Custom" element with an Action attribute with your custom action id as value like this:
<Custom Action="CreateConfig" ... /> You can insert the custom action into the UI sequence or the install sequence as follows:
<!--User Interface Sequence--> <InstallUISequence> <Custom Action='CustomAction1' Before='ExecuteAction' /> </InstallUISequence> <!--Installation Sequence--> <InstallExecuteSequence> <Custom Action='CustomAction1' After='InstallInitialize'>NOT Installed</Custom> </InstallExecuteSequence> You can also call a custom action from an event in a dialog box (snippet only - somewhat involved):
<...> <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="&Next"> <Publish Event="DoAction" Value="CustomAction1">1</Publish> <...>