Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
548 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

1 Reply

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>

 <...>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...