Welcome to JiKe DevOps Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
549 views
in Technique[技术] by (71.8m points)

.net - How to create custom actions in c# and bind it on a wix setup project

How do I create custom actions and link it to my WiX setup project?

I have:

  • WiX 3.11
  • Visual Studio
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

Please log in or register to answer this question.

1 Answer

0 votes
by (71.8m points)

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:

  • CUSTOMACTIONSNAME = The name of the custom action that was added in the references folder (Default is "CustomActions")
  • CUSTOMACTIONNAME = Choose a name for your custom action like "CreateConfig".
  • CUSTOMACTIONFUNCTION = The name of the function in your custom action project you want to call.

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="&amp;Next">

   <Publish Event="DoAction" Value="CustomAction1">1</Publish>

 <...>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to JiKe DevOps Community for programmer and developer-Open, Learning and Share
...