如何使用wix bootstarper从客户端计算机获取.net运行时版本?

问题描述 投票:0回答:2

我的要求是检查客户端计算机中最新的.net运行时版本,以便我可以比较特定版本是否属于.net 6运行时,我已经尝试了一些步骤来实现我的要求

<util:RegistrySearch Id="DotNetVersionSearch" Variable="DOTNETVERSION"
                     Root="HKLM"
                     Key="SOFTWARE\Wow6432Node\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.WindowsDesktop.App"
                     Value="Version"
                     Result="value" />

我在片段顶部声明的特定变量

<Property Id="DOTNETVERSION" Secure="yes" />

我定义了一个自定义操作来验证 .net 运行时版本是否属于 .net 6 或不如下所示。

 <CustomAction  Id="CheckDotNetVersion"
                BinaryKey="CustomActionBinary"
                DllEntry="CheckDotNetVersion"
                Execute="immediate"
                Return="check" />

以及我在名为

Customaction.cs

的类中定义的操作
    [CustomAction]
    public static ActionResult CheckDotNetVersion(Session session)
    {
        string dotNetVersion = session["DotNetVersion"];
        string dotNetVersionMin = session["DotNetVersionMin"];

        Version version;
        Version versionMin;

        if (!Version.TryParse(dotNetVersion, out version))
        {
            session.Log("Failed to parse DotNetVersion.");
            return ActionResult.Failure;
        }

        if (!Version.TryParse(dotNetVersionMin, out versionMin))
        {
            session.Log("Failed to parse DotNetVersionMin.");
            return ActionResult.Failure;
        }

        int result = version.CompareTo(versionMin);

        session["WIX_DOTNET_VERSION_COMPARE"] = result.ToString();

        return ActionResult.Success;
    }

为了显示错误,我使用了 bal:Condition 标签,如下所示

<bal:Condition
        Message="This setup requires Microsoft .NET 6.0 or above."
        ><![CDATA[Installed OR (NOT Installed AND WIX_DOTNET_VERSION_COMPARE >= 0)]]>
    </bal:Condition>

但这不起作用,有人可以帮我解决这个问题吗

c# xml wix .net-6.0 wix3.11
2个回答
3
投票

Wix 内置了对 .NET 版本检查的支持,您可以使用它:

https://wixtoolset.org/docs/tools/wixext/dotnet/#net-and-net-core

Wix 3.x 似乎不支持开箱即用的 .NET 6 检测(但我不完全确定),但 Wix 4 支持,因此您可能需要升级。

要找出哪些内容不适用于您的代码,您可以使用日志文件运行安装程序 (

msiexec yourfile.msi /l*v log.txt
),并在运行后检查日志中传递的变量值。

除此之外,不太确定你为什么使用

<bal:Condition>
,它是用于“bal”,引导程序(在安装开始之前运行的程序)。自定义操作在安装期间执行,而不是在引导程序中执行。那么,据我所知,这个条件不可能起作用?


-1
投票

@aditya 如果您有 wix3 或 wix 4 的可行解决方案。请分享一下。

© www.soinside.com 2019 - 2024. All rights reserved.