[英]Is WiX Burn 3.8 failing to set the NTSuitePersonal built-in variable correctly?
WiX 3.8 Burn 内置变量包括一些描述操作系统版本的值。 NTSuitePersonal
是其中之一。 在我希望它返回非零值的操作系统上,此变量设置为零。 这使我无法定义应用程序的安装条件。
我编写了一个C#命令行小程序来调用GetVersionEx并检索带有相关标志的OSVERSIONINFOEX结构 。 我在两台机器上运行它。 如果我检查第一台计算机,则“系统信息”对话框将OS名称显示为“ Microsoft Windows 8.1 Enterprise N”。 命令行输出如下:
wSuiteMask & VER_SUITE_PERSONAL: 0x00000100 & 0x00000200 = 0x00000000
wSuiteMask & VER_SUITE_SINGLEUSERTS: 0x00000100 & 0x00000100 = 0x00000100
第二台计算机将操作系统名称显示为“ Microsoft Windows 8.1”,并且具有以下输出:
wSuiteMask & VER_SUITE_PERSONAL: 0x00000300 & 0x00000200 = 0x00000200
wSuiteMask & VER_SUITE_SINGLEUSERTS: 0x00000300 & 0x00000100 = 0x00000100
基于此,我希望NTSuitePersonal
WiX Burn内置变量在第二台计算机上为非零,但在两者上均设置为零。 这是我在日志文件中看到的内容:
Variable: NTSuitePersonal = 0
我是否忽略了某些内容,或者这是Burn的缺陷?
作为参考,我的命令行应用程序的全文如下:
using System;
using System.Runtime.InteropServices;
namespace OperatingSystemInfoSandbox
{
class Program
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OSVERSIONINFOEX
{
public int dwOSVersionInfoSize;
public int dwMajorVersion;
public int dwMinorVersion;
public int dwBuildNumber;
public int dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szCSDVersion;
public UInt16 wServicePackMajor;
public UInt16 wServicePackMinor;
public UInt16 wSuiteMask;
public byte wProductType;
public byte wReserved;
public OSVERSIONINFOEX()
{
this.dwOSVersionInfoSize = (int)Marshal.SizeOf(typeof(OSVERSIONINFOEX));
}
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool GetVersionEx([In, Out] OSVERSIONINFOEX osvi);
public const UInt16 VER_SUITE_PERSONAL = 0x00000200;
public const UInt16 VER_SUITE_SINGLEUSERTS = 0x00000100;
static void Main(string[] args)
{
var osvi = new OSVERSIONINFOEX();
GetVersionEx(osvi);
Console.WriteLine("wSuiteMask & VER_SUITE_PERSONAL: 0x{0:x8} & 0x{1:x8} = 0x{2:x8}",
osvi.wSuiteMask, VER_SUITE_PERSONAL, osvi.wSuiteMask & VER_SUITE_PERSONAL);
Console.WriteLine("wSuiteMask & VER_SUITE_SINGLEUSERTS: 0x{0:x8} & 0x{1:x8} = 0x{2:x8}",
osvi.wSuiteMask, VER_SUITE_SINGLEUSERTS, osvi.wSuiteMask & VER_SUITE_SINGLEUSERTS);
Console.ReadKey();
}
}
}
请提交错误。 好像没有正确检查面罩。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.