【问题标题】:.NET application per-machine/per-user licensing.NET 应用程序每台机器/每用户许可
【发布时间】:2011-02-13 03:14:05
【问题描述】:

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

  1. 对于每个操作系统的许可,我使用 SerialNumber of Win32_OperatingSystem

  2. 对于每用户许可,我使用:

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

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

这样做是正确的还是完全错误的?它可以在每台 Windows 机器上运行吗? (例如,using motherboard serial is wrong

【问题讨论】:

  • 对我来说听起来不错,我一直在通过 WMI 将硬件 ID 的哈希值用于其中一个项目。记住不要假设任何硬件 ID 的格式 - 我已经看到由编写的代码导致的错误,假设返回的字符串不返回空格和东西。
  • 好吧,看到观看次数和没有其他回复的事实,我得出结论,我的方法并非完全错误。 @Mr Roys,也许您可​​以将您的评论推广为答案,这样我就可以接受它?
  • 您可能还想看看使用虚拟环境时的场景。它还会产生独特的操作系统序列号吗?我知道这不是答案.. 但无法在此处添加评论..

标签: c# licensing wmi piracy serial-number


【解决方案1】:

我认为您的方法没有任何问题,因为我已经看到在工作中使用了类似的方法 - 但是我们使用 OS S/N 和硬件 ID 的组合来进行机器许可。我们的应用没有按用户许可,所以我不能就此提出建议。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多