WiX 在具有 .NET 3.5 的机器上安装 .NET 4.5,但不在具有 .NET 4.0 的机器上

Posted

技术标签:

【中文标题】WiX 在具有 .NET 3.5 的机器上安装 .NET 4.5,但不在具有 .NET 4.0 的机器上【英文标题】:WiX installs .NET 4.5 on a machine with .NET 3.5, but not on a machine with .NET 4.0 【发布时间】:2014-04-22 14:17:26 【问题描述】:

我创建了一个 WiX 安装程序,如果它丢失了,我想安装它。

为此,我已将<PackageGroupRef Id="NetFx45Web" /> 添加到我的链中。

我遇到的奇怪问题是,在 .Net 3.5 (Windows Vista) 的机器上,一切正常,WiX 可以正确安装 .NET 4.5,但在 .NET 4.0 (Windows 7) 的机器上,什么也没有发生,并且安装程序只是执行我的应用程序而不先安装 .NET 4.5,然后由于它需要 .NET 4.5 而崩溃

我有什么遗漏或者这是一个错误吗?

【问题讨论】:

发布日志中的内容可能会有所帮助。您应该可以在 C:\Users\username\AppData\Local\Temp\ 中找到它 .net 4.5 建立在 4.0 之上...这意味着如果没有正确检查,4.0“看起来像”4.5。 WIX 如何检查是否安装了 4.5 或 4.0? 您使用的是哪个版本的 WiX?对于来自wix.codeplex.com/SourceControl/latest 的分支 wix38、wix39 或 wix40,NetFx4.5.wxs 中的最新代码似乎没有任何问题。您是否有任何其他类型的条件试图检测 .Net? 我刚刚回忆起我们在安装了 .Net 4.0 客户端配置文件的机器上安装 .Net 4.0 时遇到了类似的问题。我认为使用最新更新更新的 Windows 7 只会安装 .Net 4.0 客户端配置文件,而不是完整版本。试着记住我认为解决方案是更改 bootstrappercore.config 文件中的 行。 【参考方案1】:

我假设您正在使用来自 NetFxExtension 的 NetFx45Web 包,这意味着您正在使用 WiX 的内置检测方式。

我猜你所说的应用程序是指你的托管 BA。您必须确保正确设置您的BootstrapperCore.config。如果您的 MBA 需要 4.5 或更高版本,请确保 supportedRuntime 元素具有 4.5 而不是 4,与 supportedFramework 元素相同。

【讨论】:

抱歉,我花了这么长时间才真正尝试过。关键部分是添加<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />,谢谢!【参考方案2】:

如果您使用的是托管引导程序应用程序,那么您应该确保 BA 中设置的 supportedFramework 与您实际应用程序支持的框架相同。具体来说,如果您的应用程序需要完整的 .Net 4.5 版本,请确保您没有将客户端配置文件版本设置为受支持的框架,否则如果 BA 发现安装了客户端配置文件,它将不会下载并安装完整版本。我个人认为这是托管 BA 中的一个错误,但它已报告给 WiX 并以"notabug" 关闭。所以,从你的 BootstrapperCore.config 中删除它:

<supportedFramework version="v4.5\Client" />

【讨论】:

以上是关于WiX 在具有 .NET 3.5 的机器上安装 .NET 4.5,但不在具有 .NET 4.0 的机器上的主要内容,如果未能解决你的问题,请参考以下文章

改变 WIX 生成的 .NET 3.5 引导程序的行为

将 .NET 3.5 库与应用程序捆绑在一起,因此它可以在仅安装 .NET 2.0 的机器上运行?

.NET 4.5 Framework 上的 WiX 检查总是返回一个值?

与标准框架并排安装 .NET CF 3.5

如何根据目标机器(32 位或 64 位)有条件地使用 WiX 安装文件?

WiX“服务安装”究竟是如何在内部工作的?