如何在 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 安装程序包

在 Windows 10 商店应用程序 c# 中获取设备的唯一 ID

如何从文本框(windows窗体)检查主键是不是存在于我的数据库中,c#

如何在 CSharp 中制作自己的许可证密钥

如何检查是不是在 C# 中安装了 Windows 服务