C# .NET应用程序每台计算机/每用户许可

C# .NET应用程序每台计算机/每用户许可,c#,licensing,wmi,piracy,serial-number,C#,Licensing,Wmi,Piracy,Serial Number,我将为我的应用程序实现一个非常基本的许可功能。可以为每台计算机(或每种操作系统)或每名用户授予序列号(如Windows Server中的CAL:如果我的应用程序在一台计算机上由多个用户使用,或者如果一个用户在多台计算机上使用) 对于每个操作系统许可,我使用SerialNumber of 对于每用户许可,我使用: WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent(); if (currentIdentity != null)

我将为我的应用程序实现一个非常基本的许可功能。可以为每台计算机(或每种操作系统)或每名用户授予序列号(如Windows Server中的CAL:如果我的应用程序在一台计算机上由多个用户使用,或者如果一个用户在多台计算机上使用)

  • 对于每个操作系统许可,我使用SerialNumber of

  • 对于每用户许可,我使用:

    WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
    if (currentIdentity != null)
    {
        SecurityIdentifier userSid = currentIdentity.User.AccountDomainSid;
        Console.WriteLine(userSid);
    }
    
  • 然后,将获得的OS序列号或SID的散列存储在与应用程序序列号相关联的数据库中;每次程序启动时,它都会查询服务器,发送OS SN/SID哈希和应用程序序列号


    这样做是正确的还是完全错误的?它能在每台Windows机器上运行吗?(例如,)

    我不认为您的方法有任何错误,因为我已经看到类似的方法在工作中使用-但是我们使用操作系统序列号和硬件ID的组合进行机器许可。我们的应用程序没有针对每个用户的授权,所以我不能就此提供建议

    请注意,您不应假设WMI返回的值采用任何特定格式(Win32_OperatingSystem应该正常,硬件ID并不总是正常)


    我遇到过一些错误,其中接受硬件ID的代码采用了特定的格式,并且没有考虑到非字母数字字符(如逗号和空格)的存在

    听起来不错,我一直在工作中的一个项目中通过WMI使用硬件ID哈希。记住不要假设任何硬件ID的格式——我见过一些错误,这些错误是由于编写代码时假设返回的字符串不返回空格和其他内容造成的。好吧,看到视图的数量以及没有其他回复的事实,我得出结论,我的方法并不是完全错误的@罗伊斯先生,也许你可以把你的评论提升为一个答案,这样我就可以接受了?你可能还想看看使用虚拟环境时的场景。它还会产生唯一的操作系统序列号吗?我知道这不是答案。。但无法在此处添加评论。。