我正在为我们的计划编写一个基本的许可类。我想将此许可证绑定到服务器,以便他们无法移动许可证并期望它能够正常工作。
程序在每个工作站上从服务器上的共享驱动器本地运行。我们的大多数客户都是在对等网络上运行,因为他们是规模较小的公司,只有几台计算机。
我想获得服务器的唯一标识符,因此当工作站启动应用程序时,它将验证许可证是否针对正确的服务器运行。
我几乎完成了课程,但我无法弄清楚如何获得服务器的一致唯一标识符。
另外,我是用C#.net。
写的有什么建议吗?
谢谢!
答案 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