我用C#写了一个COM组件,在服务器上注册后给ASP调用,实现的主要功能是读取硬盘序列号和网卡物理地址。具体代码如下:
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");string s_MAC = "", s_Disk = "";
foreach (ManagementObject mo in moc)
{
     if ((bool)mo["IPEnabled"] == true)
     {
          s_MAC = "MAC:" + mo["MacAddress"].ToString();
          break;
      }
}disk.Get();
s_Disk = disk.GetPropertyValue("VolumeSerialNumber").ToString();此COM组件在WIN7系统下测试无误,但部署到WIN2003服务器上执行提示 "访问遭到拒绝"。
我在网上搜索了相关资料,大部分是说WIN2003的安全机制限制了COM控件对硬件的直接读取功能,但根据上面说的做了很多权限修改的工作后还是无法实现正常的读取。
后来想采用 DriveInfo[] 来获取硬盘信息,这个执行是不会报错,但无法取得硬盘序列号。
请问哪位大哥有相应的解决方案,可以在WIN2003系统下实现COM组件读取硬盘序列号的功能,不胜感谢。

解决方案 »

  1.   

    你去检查下WINDOWS 2003里面的IIS6.0里的应用程序池的安全性权限,IIS6中的工作进程属于IIS_WPG帐户(也就是我们说的工作者进程),你要保证IIS_WPG有足够的权限来进行你的工作,比如说你的这个COM访问磁盘。网上有人说可以将IIS_WPG纳入administrator组,也就是拥有系统最高权限。我没有试过,你可以试一下。
      

  2.   

     ls说的  lz可以试一下。。  应该可行
      

  3.   

    光是象 ZeewenDotNet 说的也不行,同时又在 wmimgmt.msc 里的安全标签里添加了相应的读取权限才可以了。
    谢谢各位。