在asp.net应用程序中获取卷序列号的最佳方法?

时间:2011-09-20 15:38:00

标签: asp.net permissions pinvoke

我在ASP.Net应用程序上工作,该应用程序是已经存在的winforms桌面应用程序的Web版本。桌面应用程序读取定义已启用功能的许可证文件以调整其行为。要将应用程序锁定到特定计算机,许可证文件的设置之一是第一个系统卷的序列号。启动时,应用程序会检查许可证文件中的序列号是否与卷序列号匹配。获取卷序列号是通过PInvoking kernel32.dll的GetVolumeInformation函数完成的 但是在asp.net版本中,使用本地服务或本地网络标识的标准应用程序池没有PInvoke的权限,导致无法检查许可证文件是否有效。如何在应用程序启动时检查许可证?

我可以想到以下替代方案:

  • 用一个不需要特殊权限来获取卷序列号的方法替换PInvoke(WMI是这种情况吗?)
  • 将所有许可证检查代码放在单独的程序集中,并将其安装到GAC以使其执行升级
  • 在安装过程中为我的应用程序创建一个具有管理员身份的应用程序池

第一种解决方案是最好的,但我不知道是否有可能 我有其他可能吗?每种方法的优缺点是什么?哪一个最好?

1 个答案:

答案 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"]);
}