.NET应用程序的按机器/按用户许可证

9

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

  1. For per-operating-system licensing, I use SerialNumber of Win32_OperatingSystem.

  2. For per-user licensing, I use:

    WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
    if (currentIdentity != null)
    {
        SecurityIdentifier userSid = currentIdentity.User.AccountDomainSid;
        Console.WriteLine(userSid);
    }
    

然后将获得的操作系统序列号或SID的哈希值存储在数据库中,与应用程序序列号关联;每次程序启动时,它会查询服务器,发送操作系统SN / SID和应用程序序列号的哈希值。

这样做是正确的吗?还是完全错误的?它能在每台Windows机器上工作吗?(例如,使用主板序列号是错误的


对我来说听起来不错,我在工作中的一个项目中一直在使用通过 WMI 的硬件 ID 的哈希值。记得不要假定任何硬件 ID 的格式 - 我曾经看到由于代码假定返回的字符串不包含空格等字符而导致的错误。 - anonymous
嗯,看到浏览量和没有其他回复的事实,我得出结论,我的方法并不完全错误。@Mr Roys,也许您可以将您的评论提升为答案,这样我就能接受它了? - Arseni Mourzenko
您可能还想看一下在使用虚拟环境时的情况。它是否仍会产生唯一的操作系统序列号?我知道这不是一个答案...但无法在此处添加评论... - Srikanth Venugopalan
1个回答

3
我认为你的方法没有问题,因为我在工作中看到过类似的方法被使用 - 但是我们使用操作系统S/N和硬件ID的组合来进行机器许可。我们的应用程序没有每个用户的许可证,所以我无法提供建议。
请注意,您不应假定WMI返回的值具有特定的格式(Win32_OperatingSystem 应该没问题,硬件ID的ID并不总是正确的)。
我曾经遇到过错误,代码接受硬件ID时假定了一个特定的格式,并且没有考虑到非字母数字字符(如逗号和空格)的存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接