我正在研究用于激活 Web 应用程序的许可证密钥。它可以部署在物理服务器,虚拟服务器,共享托管服务器和(Azure云托管)本机云服务器上。本产品一次发给一个用户。
我创建了窗口应用程序,该应用程序跟踪硬件指纹当前服务器并创建Web应用程序的许可证密钥。 其中存储硬件指纹,许可证密钥问题的时间段。这在物理服务器中很好。它不会是改变。
这是检测硬件打印链接的代码我正在检测
- 制造者
- 生物标识
- 磁盘标识
- 基本标识
- 视频标识
- MacId
现在的问题是我不能对虚拟服务器和(Azure 云托管)本机云服务器使用此方法。
现在我正试图得到
- 静态 IP 地址
- 域名
- 按系统划分的图形用户界面
- 文件路径的位置(安装应用程序的位置)
通过使用这四个,我创建了产品密钥。 但我仍然不知道这个组件是否适合创建唯一的许可证密钥。
我发现的一些限制
- 如果(Azure 云托管)云服务器 IP 地址已更改。 它没有静态 IP地址
- 如何处理内部 IP 地址和外部 IP 地址
只是我需要知道我可以使用哪个组件来创建密钥。 或者当硬件组件在云和虚拟服务器上发生变化时,我可以使用什么策略。
每个系统都有唯一的 BIOS UUID。这在所有虚拟机和系统中都是唯一的。下面的方法是我们如何检测系统是否在虚拟PC中运行 public static bool detectVPC()
{
using (var searcher = new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem"))
{
using (var items = searcher.Get())
{
foreach (var item in items)
{
string manufacturer = item["Manufacturer"].ToString().ToLower();
if ((manufacturer == "microsoft corporation" && item["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL"))
|| manufacturer.Contains("vmware")
|| item["Model"].ToString() == "VirtualBox")
{
return true;
}
}
}
}
return false;
}
用于检测 UUID 的代码:
public static string UUID
{
get
{
string uuid = string.Empty;
ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
uuid = mo.Properties["UUID"].Value.ToString();
break;
}
return uuid;
}
}
这解决了我的问题。我通过以下方式测试了此代码
- 在维鲁阿尔电脑
- 在物理 PC 中
- 复制虚拟硬盘
- 创建了硬盘克隆
我确实在 Azure 云和共享托管服务器中测试了此代码