许可证的C#远程服务器唯一标识符

时间:2011-05-06 13:15:44

标签: c# licensing network-programming

我正在为我们的计划编写一个基本的许可类。我想将此许可证绑定到服务器,以便他们无法移动许可证并期望它能够正常工作。

程序在每个工作站上从服务器上的共享驱动器本地运行。我们的大多数客户都是在对等网络上运行,因为他们是规模较小的公司,只有几台计算机。

我想获得服务器的唯一标识符,因此当工作站启动应用程序时,它将验证许可证是否针对正确的服务器运行。

我几乎完成了课程,但我无法弄清楚如何获得服务器的一致唯一标识符。

另外,我是用C#.net。

写的

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

听起来你想要计算机的安全标识符(SID)。

string fqdn = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).HostName;

int firstDot = fqdn.IndexOf('.');
string host = fqdn.Substring(0, firstDot);
string domain = fqdn.Substring(firstDot + 1);

NTAccount account = new NTAccount(domain, host + "$");
SecurityIdentifier sid =
    (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));

// we're done, show the results:
Console.WriteLine(account.Value);
Console.WriteLine(sid.Value);

(从here复制标识符的代码。虽然经过测试。但是有效。)

参考下面的讨论,对用户来说最“温和”的方式是按主机名许可。这就是dotNetCharting这样做的方式(或者几年前我购买软件时的做法)。基于硬件或计算机的SID很容易发生变化,并且在硬件更改或重新安装操作系统时需要重新许可/激活。上面代码中的第一行返回完全限定的域,您可以将其用于此目的。

答案 1 :(得分:0)

获取CPU和系统硬盘和主板的序列号然后哈希。您可以在课程中混淆您所获取的硬件序列/模型信息。

有关codeproject的文章解释了如何获取信息:http://www.codeproject.com/KB/system/GetHardwareInformation.aspx