如何让 MSI 在 Windows 2012 R2 上运行时返回正确的 VersionNT 值



当我在Windows 2012 R2机器(RTM build 9600)上运行MSI时,VersionNT属性设置为602(而不是603)。 如果 602 实际上是正确的操作系统版本,那么如何在安装时以编程方式区分 Windows 2012 和 Windows 2012 R2?

更新:看起来如果我直接在Windows 2012 R2或Windows 8.1上运行我的MSI,VersionNT将正确设置为603。 如果我的 MSI 由引导程序(win32 应用程序)启动,则 VersionNT 将错误地设置为 602。 因此,直接运行的 MSI 与由 win32 应用启动的 MSI 之间存在差异。

视窗 10 更新:
我发现当我更新引导程序的清单以支持 Windows 10 兼容性时,MSI 的 InstallUISequence 将正确设置 VersionNT=1000,但 InstallExecuteSequence 将具有 VersionNT=603。

如何使 InstallExecuteSequence 也设置 VersionNT=1000?

引导程序需要显式支持 Win8/2012R3。这将很快在 WiX 3.8 的刻录中修复,但您可以显示任何引导程序,如下所述:http://msdn.microsoft.com/en-us/library/aa374191%28v=vs.85%29.aspx。

具体来说,您需要为 Windows 8 和 Windows 8.1 添加 GUID:

  • {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}
  • {1f676c76-80e1-4239-95bb-83d0f6d0da78}

如果您有权访问引导程序的源代码,则更好的、面向未来的方法是调用RtlGetVersion,如下所述:http://msdn.microsoft.com/en-us/library/windows/hardware/ff561910(v=vs.85).aspx。这是我在外部推动刻录的更改(我们在内部将其用于Visual Studio)。

最新更新