一个获取服务器硬件信息的代码!求指点……

小虾米zheng 2013-04-26 09:40:48
我写了 一个获取服务器 硬盘序列号 和网卡mac 地址 的 代码 ,编译成 dll ,再后台 调用它。
调试的时候 显示是 正常的, 但是 发布成 网站 之后 ,获取到的 硬盘序列号和网卡mac 地址 却是 错误的 。
然后我把 这个 dll 拿来 在 winform 里 试了下 也是 正常的。
所以 我想 问题 应该出在 iis 里。或者其他 什么地方?
求高手 指点…………



//获取ip mac地址
public static string GetMacAddress()
{
ManagementClass class2 = new ManagementClass("Win32_NetworkAdapterConfiguration");
foreach (ManagementObject obj2 in class2.GetInstances())
{
if (obj2["IPEnabled"].ToString() == "True")
{
return obj2["MacAddress"].ToString();
}
}
return null;
}
//获取硬盘序列号
public static string GetHardDiskSN()
{
return GetHardwareInfo(HardwareEnum.Win32_PhysicalMedia, "SerialNumber");
}








...全文
291 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小虾米zheng 2013-04-26
  • 打赏
  • 举报
回复
引用 7 楼 insus 的回复:
Refer: http://www.cnblogs.com/insus/archive/2011/09/08/2170507.html
我知道 我的问题 出在哪里了 。。 我用 网页 打开之后 获取到的是 unicode 编码的。- -而调试时 是正常的。- -所以我以为出错了。- -
小虾米zheng 2013-04-26
  • 打赏
  • 举报
回复
引用 8 楼 liuchaolin 的回复:
如果只是想获取mac地址有更简单点的方法,GetMac("127.0.0.1")//这里是服务器ip地址 public string GetMac(string clientIp) { string mac = ""; System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = "nbtstat"; process.StartInfo.Arguments = "-a " + clientIp; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); string output = process.StandardOutput.ReadToEnd(); int length = output.IndexOf("MAC Address ="); if (length > 0) { mac = output.Substring(length + 14, 17); } return mac; }
我知道 我的问题 出在哪里了 。。 我用 网页 打开之后 获取到的是 unicode 编码的。- -而调试时 是正常的。- -所以我以为出错了。- -
md5e 2013-04-26
  • 打赏
  • 举报
回复
如果只是想获取mac地址有更简单点的方法,GetMac("127.0.0.1")//这里是服务器ip地址 public string GetMac(string clientIp) { string mac = ""; System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = "nbtstat"; process.StartInfo.Arguments = "-a " + clientIp; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); string output = process.StandardOutput.ReadToEnd(); int length = output.IndexOf("MAC Address ="); if (length > 0) { mac = output.Substring(length + 14, 17); } return mac; }
md5e 2013-04-26
  • 打赏
  • 举报
回复
HttpModule创建好后,所有页面都可以 Hard hard=Hard.GetCacheService(); hard.HardID 我这里获取的是硬盘序列号
md5e 2013-04-26
  • 打赏
  • 举报
回复
引用 4 楼 zheng1927 的回复:
引用 1 楼 liuchaolin 的回复: C# code ? 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838……
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using System.Management; using System.Diagnostics; namespace Galsun.HH.FCX.Content { /// <summary> /// 获取硬件信息 /// </summary> public class Hard { private static volatile Hard instance = null; private static object lockHelper = new object(); private string _HardID = string.Empty; /// <summary> /// 构造函数 /// </summary> private Hard() { _HardID = GetHardInfo(); } /// <summary> /// 获取硬件信息 /// </summary> public string HardID { get { return _HardID; } } /// <summary> /// 单体模式返回当前类的实例 /// </summary> /// <returns></returns> public static Hard GetCacheService() { if (instance == null) { lock (lockHelper) { if (instance == null) { instance = new Hard(); } } } return instance; } /// <summary> /// 获取硬盘ID /// </summary> /// <returns>硬盘ID</returns> private string GetHardInfo() { string HDInfo = ""; ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); ManagementClass cimobject2 = new ManagementClass("Win32_Processor"); try { ManagementObjectCollection moc1 = cimobject1.GetInstances(); foreach (ManagementObject mo in moc1) { HDInfo += (string)mo.Properties["Model"].Value; break; } ManagementObjectCollection moc2 = cimobject2.GetInstances(); foreach (ManagementObject mo in moc2) { HDInfo += (string)mo.Properties["Processorid"].Value; break; } } catch (Exception err) { HDInfo = err.ToString(); } return HDInfo; } private string RunCmd(string command) { //实例一个Process类,启动一个独立进程 Process p = new Process(); //Process类有一个StartInfo属性 //设定程序名 p.StartInfo.FileName = "cmd.exe"; //设定程式执行参数 p.StartInfo.Arguments = "/c " + command; //关闭Shell的使用 p.StartInfo.UseShellExecute = false; //重定向标准输入 p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; //重定向错误输出 p.StartInfo.RedirectStandardError = true; //设置不显示窗口 p.StartInfo.CreateNoWindow = true; //启动 p.Start(); //也可以用这种方式输入要执行的命令 //不过要记得加上Exit要不然下一行程式执行的时候会当机 //p.StandardInput.WriteLine(command); //p.StandardInput.WriteLine("exit"); //从输出流取得命令执行结果 return p.StandardOutput.ReadToEnd(); } } } 我这里用单例的静态方法来实现全局共享
小虾米zheng 2013-04-26
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
C# code ? 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959……
这个要怎么调用? 比如 我在 网页上 点击 按钮 他能返回 服务器 的 这些 信息么? <add ... /> 这个是在 Web.config 里的?
小虾米zheng 2013-04-26
  • 打赏
  • 举报
回复
引用 2 楼 insus 的回复:
这是获取站点所在主机的硬件信息。
我要获取的 就是 这个啊? 我 的网站 也是在 本地 电脑上 iis 里 建的 。 按理说 获取的 和我 调试时 获取的 应该一样啊??
insus 2013-04-26
  • 打赏
  • 举报
回复
这是获取站点所在主机的硬件信息。
md5e 2013-04-26
  • 打赏
  • 举报
回复

using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading;
using System.Web;
using System.Xml;
using Galsun.Common;
using Galsun.HH.FCX.Content;
using Galsun.HH.FCX.Mode;
using System.Data;
using System.Management;


namespace Galsun.HH.FCX.Web.UI
{
    public class HttpModule : System.Web.IHttpModule
    {
        /// <summary>
        /// 实现接口的Init方法
        /// </summary>
        /// <param name="context"></param>
        public void Init(HttpApplication context)
        {
            Hard hard = Hard.GetCacheService();
            GetHardID();
        }
        /// <summary>
        /// 获取硬盘ID
        /// </summary>
        /// <returns>硬盘ID</returns>
        public static string GetHardID()
        {

            string HDInfo = "";

            ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
            ManagementClass cimobject2 = new ManagementClass("Win32_Processor");
            try
            {

                ManagementObjectCollection moc1 = cimobject1.GetInstances();

                foreach (ManagementObject mo in moc1)
                {

                    HDInfo += (string)mo.Properties["Model"].Value;
                    break;
                }
                ManagementObjectCollection moc2 = cimobject2.GetInstances();

                foreach (ManagementObject mo in moc2)
                {

                    HDInfo += (string)mo.Properties["Processorid"].Value;
                    break;
                }
            }
            catch (Exception err)
            {
                HDInfo = err.ToString();
            }
            if (System.Web.HttpContext.Current.Application["HDInfo"] == null)
            {
                System.Web.HttpContext.Current.Application.Lock();
                System.Web.HttpContext.Current.Application["HDInfo"] = HDInfo;
                System.Web.HttpContext.Current.Application.UnLock();
            }
            return HDInfo;

        }

        public void Application_OnError(Object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;
            //if (context.Server.GetLastError().GetBaseException() is MyException)
            {
                //MyException ex = (MyException) context.Server.GetLastError().GetBaseException();
                context.Response.Write("<html><body style=\"font-size:14px;\">");
                context.Response.Write("GL.CMS Error:<br />");
                context.Response.Write("<textarea name=\"errormessage\" style=\"width:80%; height:200px; word-break:break-all\">");
                context.Response.Write(System.Web.HttpUtility.HtmlEncode(context.Server.GetLastError().ToString()));
                context.Response.Write("</textarea>");
                context.Response.Write("</body></html>");
                context.Response.End();
            }

        }


        /// <summary>
        /// 实现接口的Dispose方法
        /// </summary>
        public void Dispose()
        {

        }
    }
}
<add type="Galsun.HH.FCX.Web.UI.HttpModule, Galsun.HH.FCX.Web.UI" name="HttpModule" /> 要放到这里来执行

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧