如果Windows操作系统具有无效许可证,则使用C#检测

时间:2013-09-10 11:11:27

标签: c# .net windows operating-system

有没有办法检测正在运行的Window OS是否具有有效的许可证?如果正在运行的Windows操作系统没有有效的许可证,我不想执行我的程序。 .Net 3.5中的任何函数或方法都可以获取此信息吗?

1 个答案:

答案 0 :(得分:2)

我已经为您复制了以下解决方案:

Determine Genuine Windows Installation in C#

如果能解决问题,请不要忘记给出答案!

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication11
{
 using SLID = Guid; //SLID id declarated as typedef GUID SLID; in slpublic.h 

class Program
{

public enum SL_GENUINE_STATE
{
  SL_GEN_STATE_IS_GENUINE       = 0,
  SL_GEN_STATE_INVALID_LICENSE  = 1,
  SL_GEN_STATE_TAMPERED         = 2,
  SL_GEN_STATE_LAST             = 3
}

[DllImportAttribute("Slwga.dll", EntryPoint = "SLIsGenuineLocal", CharSet = CharSet.None, ExactSpelling = false, SetLastError = false, PreserveSig = true, CallingConvention = CallingConvention.Winapi, BestFitMapping = false, ThrowOnUnmappableChar = false)]
[PreserveSigAttribute()]
internal static extern uint SLIsGenuineLocal(ref SLID slid, [In, Out] ref SL_GENUINE_STATE genuineState, IntPtr val3);


public static bool IsGenuineWindows()
{
    bool _IsGenuineWindows   = false;
    Guid ApplicationID       = new Guid("55c92734-d682-4d71-983e-d6ec3f16059f"); //Application ID GUID http://technet.microsoft.com/en-us/library/dd772270.aspx
    SLID windowsSlid = (Guid)ApplicationID;  
    try
    {
      SL_GENUINE_STATE genuineState = SL_GENUINE_STATE.SL_GEN_STATE_LAST;
      uint ResultInt                = SLIsGenuineLocal(ref windowsSlid, ref genuineState, IntPtr.Zero);
      if (ResultInt == 0)
      {
        _IsGenuineWindows = (genuineState == SL_GENUINE_STATE.SL_GEN_STATE_IS_GENUINE);
      }
      else
      {
        Console.WriteLine("Error getting information {0}", ResultInt.ToString());          
      }

    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
    }
    return _IsGenuineWindows;
}    

static void Main(string[] args)
{
  if (Environment.OSVersion.Version.Major >= 6) //Version 6 can be Windows Vista, Windows Server 2008, or Windows 7
  {
    if (IsGenuineWindows())
    {
      Console.WriteLine("Original Windows");        
    }
    else
    {
      Console.WriteLine("Not Original Windows");                
    }
  }
  else
  {
    Console.WriteLine("OS Not supoprted");     
  }
  Console.ReadLine();
}
}
}