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

后端 未结 1 1382
谎友^
谎友^ 2021-01-14 07:09

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

I have:

  • WiX 3.11
  • Visual Studio
相关标签:
1条回答
  • 2021-01-14 08:04

    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>
    
     <...>
    
    0 讨论(0)
提交回复
热议问题