2010-04-27 50 views
9

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

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

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

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

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

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

+0

对我来说听起来不错,我一直在使用通过WMI的硬件ID散列作为工作中的一个项目。切记不要假定任何硬件ID的格式 - 我看过编写代码导致的错误,假定返回的字符串不返回空格和内容。 – anonymous 2010-04-28 03:44:53

+0

好吧,看到观看次数和没有其他答复的事实,我得出结论说我的方法并非完全错误。 @Mr罗伊斯,也许你可以促进你的评论一个答案,所以我会能够接受它? – 2010-04-28 20:36:27

+0

您可能还想查看使用虚拟环境的场景。它仍然会产生独特的操作系统s/n?我知道这不是一个答案..但不能在这里添加评论.. – 2010-04-29 02:59:58

回答

2

我没有看到你的方法有什么问题,因为我已经看到类似的方法在工作中使用 - 但是我们使用OS S/N和硬件ID的组合来进行机器许可。我们的应用程序没有每个用户的许可,所以我不能就此提供建议。

请注意,你不应该假设,通过WMI返回的值是在任何特定的格式(Win32_OperatingSystem应该OK,硬件ID不一定OK)

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

相关问题