我的要求是检查客户端计算机中最新的.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>
但这不起作用,有人可以帮我解决这个问题吗
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”,引导程序(在安装开始之前运行的程序)。自定义操作在安装期间执行,而不是在引导程序中执行。那么,据我所知,这个条件不可能起作用?
@aditya 如果您有 wix3 或 wix 4 的可行解决方案。请分享一下。