如何检查 Windows 版本是不是为正版?

Posted

技术标签:

【中文标题】如何检查 Windows 版本是不是为正版?【英文标题】:How to check if a Windows version is Genuine or not?如何检查 Windows 版本是否为正版? 【发布时间】:2011-09-25 11:28:29 【问题描述】:

是否可以通过编程方式检查 Windows 安装是否为正版? 假设我想从 C、C++、Java 或 Python 中检查 Windows 7。

【问题讨论】:

【参考方案1】:

来自 CodeProject 的 C++ (Check for Windows Genuine in VC++)

#include <slpublic.h>
#pragma comment(lib,"Slwga.lib")

bool IsWindowsGenuine()

    GUID uid;
    RPC_WSTR rpc=(RPC_WSTR)_T("55c92734-d682-4d71-983e-d6ec3f16059f");
    UuidFromString(rpc,&uid);
    SL_GENUINE_STATE state;
    SLIsGenuineLocal(&uid,&state,NULL);
    return state == SL_GENUINE_STATE::SL_GEN_STATE_IS_GENUINE;

【讨论】:

if (expression) return true; [else] return false; 可以替换为return expression; 是的,只是从代码项目中复制的,不是我自己写的:D 返回状态==SL_GENUINE_STATE::SL_GEN_STATE_IS_GENUINE; SL_GENUINE_STATE 是一个enum;使用枚举名称作为命名空间是 Microsoft 扩展(并且是不必要的)。写return state == SL_GEN_STATE_IS_GENUINE; 什么是“55c92734-d682-4d71-983e-d6ec3f16059f”?【参考方案2】:

来自here:这是一个可以做到的vbscript

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "impersonationLevel=impersonate!\\" & strComputer & "\root\cimv2")
Set colWPA = objWMIService.ExecQuery _
("Select * from Win32_WindowsProductActivation")
For Each objWPA in colWPA
Wscript.Echo "Activation Required: " & objWPA.ActivationRequired
Wscript.Echo "Description: " & objWPA.Description
Wscript.Echo "Product ID: " & objWPA.ProductID
Wscript.Echo "Remaining Evaluation Period: " & _
objWPA.RemainingEvaluationPeriod
Wscript.Echo "Remaining Grace Period: " & objWPA.RemainingGracePeriod
Wscript.Echo "Server Name: " & objWPA.ServerName
Next

【讨论】:

【参考方案3】:

Java 解决方案是使用Process 将C++ 或VBScript 解决方案作为子进程运行。

【讨论】:

以上是关于如何检查 Windows 版本是不是为正版?的主要内容,如果未能解决你的问题,请参考以下文章

win10还原到win7右下角显示此Windows副本不是正版

关于windows正版验证的问题

正版windows server 2008 R2可以免费升级到windows server 2016 吗

如何使用最快速的方式激活windows10所有版本

KMS 激活正版

windows server 2008 正版的问题