3

当我在 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 应用程序启动之间存在差异。

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

如何使 InstallExecuteSequence 也设置 VersionNT=1000?

4

1 回答 1

2

您的引导程序需要明确支持 Win8/2012R3。这将在 Burn 中很快在 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。这是我要在外部进行 Burn 的更改(我们在内部将其用于 Visual Studio)。

于 2014-01-18T03:09:13.123 回答