1

我正在研究用于激活 Web 应用程序的许可证密钥。可以部署在物理服务器、虚拟服务器、共享托管服务器和(Azure云托管)本地云服务器上。该产品一次发行给一位用户。

我创建了窗口应用程序,它跟踪硬件指纹当前服务器并创建 Web 应用程序的许可证密钥。其中存储硬件指纹,许可证密钥发布的时间段。这在物理服务器中很好。它不会改变。

这是检测 我正在检测的硬件打印链接的代码

  1. 制造商
  2. 生物识别号
  3. 磁盘标识符
  4. 基本标识
  5. 视频 ID
  6. MacId

现在的问题是我不能对虚拟服务器和(Azure 云托管)本机云服务器使用这种方法。

现在我试图得到

  1. 静态 IP 地址
  2. 域名
  3. 系统 GUID
  4. 文件路径的位置(安装应用程序的位置)

通过使用这四个,我创建了产品密钥。但我仍然不知道这个组件是否适合创建唯一的许可证密钥。

我发现了一些限制

  1. 如果(Azure 云托管) 云服务器 IP 地址已更改。它没有静态 IP 地址
  2. 我如何处理内部 IP 地址和外部 IP 地址

只是我需要知道我可以使用哪个组件来创建密钥。或者当硬件组件在云和虚拟服务器上发生变化时我可以使用什么策略。

4

1 回答 1

0

每个系统都有唯一的 BIOS UUID。这在所有虚拟机和系统中都是独一无二的。下面这个方法是我们如何检测系统在虚拟电脑中运行的方法 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;
        }
    }

这解决了我的问题。我测试了这段代码

  1. 在虚拟电脑中
  2. 在物理 PC
  3. 复制虚拟硬盘
  4. 创建了硬盘的克隆

我确实在天蓝色云中测试了这段代码并共享托管服务器

于 2016-03-19T07:31:16.173 回答