如何在 C# 中检查 Windows 许可证状态?
Posted
技术标签:
【中文标题】如何在 C# 中检查 Windows 许可证状态?【英文标题】:How to check Windows license status in C#? 【发布时间】:2017-01-06 22:50:43 【问题描述】:我希望我的程序检查 Windows 10 是否已激活
我有以下代码
public static bool IsWindowsActivated()
bool activated = true;
ManagementScope scope = new ManagementScope(@"\\" + System.Environment.MachineName + @"\root\cimv2");
scope.Connect();
SelectQuery searchQuery = new SelectQuery("SELECT * FROM Win32_WindowsProductActivation");
ManagementObjectSearcher searcherObj = new ManagementObjectSearcher(scope, searchQuery);
using (ManagementObjectCollection obj = searcherObj.Get())
foreach (ManagementObject o in obj)
activated = ((int)o["ActivationRequired"] == 0) ? true : false;
return activated;
在尝试使用此代码时,调试器会抱怨 Invalid class
,我不知道它是什么
我应该怎么做才能解决这个问题?或者有没有其他方法可以检查 Windows 的许可证状态?
【问题讨论】:
您在代码中的什么位置收到Invalid class
警告...?
foreach
循环中的@MethodMan
您在哪个版本的 Windows 上执行此操作?
@ScottChamberlain 这是 Windows 10
"注意该类在 Windows XP 或 Windows Server 2003 R2 以外的平台上不受支持。在这些平台上,建议您改用软件许可类。"
【参考方案1】:
WMI 类 Win32_WindowsProductActivation
仅在 Windows XP 上受支持。对于 Windows 10,您需要使用 SoftwareLicensingProduct
public static bool IsWindowsActivated()
ManagementScope scope = new ManagementScope(@"\\" + System.Environment.MachineName + @"\root\cimv2");
scope.Connect();
SelectQuery searchQuery = new SelectQuery("SELECT * FROM SoftwareLicensingProduct WHERE ApplicationID = '55c92734-d682-4d71-983e-d6ec3f16059f' and LicenseStatus = 1");
ManagementObjectSearcher searcherObj = new ManagementObjectSearcher(scope, searchQuery);
using (ManagementObjectCollection obj = searcherObj.Get())
return obj.Count > 0;
【讨论】:
我在activated = ((int)o["LicenseStatus"] == 1) ? true : false;
中仍然遇到错误Specified cast is not valid
刷新,我刚刚更新了一个更简单的检查。确保您也更新了SelectQuery
,查询已更改。以上是关于如何在 C# 中检查 Windows 许可证状态?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中正确检查 HttpResponseMessage 的 http 状态代码?
在 Windows 10 商店应用程序 c# 中获取设备的唯一 ID