[wix-users] .NET 7 NativeAOT Custom Actions appear to work

Christopher Painter chrpai at iswix.com
Tue Nov 15 07:55:51 PST 2022


Maybe Heatwave could have a Rust CA project type.
________________________________
From: wix-users <wix-users-bounces at lists.wixtoolset.org> on behalf of Bob Arnson via wix-users <wix-users at lists.wixtoolset.org>
Sent: Tuesday, November 15, 2022 7:19 AM
To: WiX Toolset Users Mailing List <wix-users at lists.wixtoolset.org>
Cc: Bob Arnson <bob at firegiant.com>
Subject: Re: [wix-users] .NET 7 NativeAOT Custom Actions appear to work

That it's only 3MB is actually pretty impressive.

But Rust can do better. 😊

> -----Original Message-----
> From: wix-users <wix-users-bounces at lists.wixtoolset.org> On Behalf Of
> Edwin Young via wix-users
> Sent: Tuesday, 15 November, 2022 01:45
> To: wix-users at lists.wixtoolset.org
> Cc: Edwin Young <the.edwin.young at gmail.com>
> Subject: [wix-users] .NET 7 NativeAOT Custom Actions appear to work
>
> Hi,
>
> I've long found it a bit frustrating to write custom actions - writing HRESULT-
> style C++ makes me sad, and managed custom actions, despite the awesome
> work the Wix team has put in, have some drawbacks, like the dependency on
> having a compatible framework installed.
>
> So I was quite excited to see that .NET 7 has the ability to output DLLs which
> have no dependencies and can be called from unmanaged code :-) See
> samples/core/nativeaot/NativeLibrary
> at main · dotnet/samples · GitHub
> <https://github.com/dotnet/samples/tree/main/core/nativeaot/NativeLibrar
> y>
>
> I wanted to see if this would work for Custom Actions, and according to my
> very first experiment, the answer appears to be yes!
>
> edyoung/net7ca: Experiment to see if I can write Custom Actions in .NET 7
> (github.com) <https://github.com/edyoung/net7ca>
>
> I can write a custom action in C#:
>
> using System.Runtime.InteropServices;
> using WixToolset.Dtf.WindowsInstaller;
>
> namespace CustomAction;
> public class Class1
> {
>     [UnmanagedCallersOnly(EntryPoint = "CustomAction2")]
>     public static uint CustomAction2(IntPtr handle)
>     {
>         using Session session = Session.FromHandle(handle, false);
>
>         session.Log("Custom Action 2 Called");
>         return 0;
>     }
> }
>
> Compile it with .NET 7, publish it, and call it from an installer. The log
> message appears in the MSI log!
>
> The binary DLL which is output contains all the bits of the CLR which are
> required, which turns out to be about 3MB - painfully large, but not
> impossible if you have a largish install package.
>
> So obviously, this is a very long way from a production solution - there are
> likely all sorts of problems ahead - but I'm quite excited about the
> possibilities, so I wanted to share.
>
> Also, Wix4 worked beautifully first time for this experiment. Thanks Rob &
> co!
>
> Happy installing!
> --
> Edwin
>
> ________________________________________________________________
> ____
> WiX Toolset Users Mailing List provided by FireGiant
> http://www.firegiant.com/

____________________________________________________________________
WiX Toolset Users Mailing List provided by FireGiant http://www.firegiant.com/


More information about the wix-users mailing list