我在ASP.Net应用程序上工作,该应用程序是已经存在的winforms桌面应用程序的Web版本。桌面应用程序读取定义已启用功能的许可证文件以调整其行为。要将应用程序锁定到特定计算机,许可证文件的设置之一是第一个系统卷的序列号。启动时,应用程序会检查许可证文件中的序列号是否与卷序列号匹配。获取卷序列号是通过PInvoking kernel32.dll的GetVolumeInformation
函数完成的
但是在asp.net版本中,使用本地服务或本地网络标识的标准应用程序池没有PInvoke的权限,导致无法检查许可证文件是否有效。如何在应用程序启动时检查许可证?
我可以想到以下替代方案:
第一种解决方案是最好的,但我不知道是否有可能 我有其他可能吗?每种方法的优缺点是什么?哪一个最好?
答案 0 :(得分:0)
我建议使用WMI。 Win32_Volume类具有卷的序列号。你可以使用这样的东西:
using System.Management;
SelectQuery query = new SelectQuery("Win32_Volume");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine("{0} {1}", obj["DriveLetter"], obj["SerialNumber"]);
}