己经 using System.ManagementClass,调试时还是出现错误 3 找不到类型或命名空间名称“ManagementClass”(是否缺少 using 指令或程序集引用?) 这是为什么呀?WINFORM程序标准引用是不包含System.Management的,要手工添加引用
managementclass相关话题
WINFORM程序,代码如下:public static DataTable testDisk() { DataTable dt = new DataTable(); dt.Columns.Add("path"); dt.Columns.Add("totalSpace"); dt.Columns.Add("freeSpace"); dt.Columns.Add("freePencent"); ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk"); ManagementObjectCollection disks = diskClass.GetInstances(); try { foreach (ManagementObject disk in disks) { DataRow dr; UInt64 k = 1024; dr = dt.NewRow(); dr[0] = disk["Name"].ToString(); dr[1] = (UInt64)(disk["FreeSpace"]) / k / k;//转为MB dr[2] = (UInt64)(disk["Size"]) / k / k;//转为MB int free = int.Parse((UInt64.Parse(dr[1].ToString())).ToString()); int total = int.Parse((UInt64.Parse(dr[2].ToString())).ToString()); dr[3] = (((free * 1.0000) / (total * 1.0000)) * 100).ToString("f2") + "%"; dr[1] += "MB"; dr[2] += "MB"; dt.Rows.Add(dr); }//MessageBox.Show(freeSpace.ToString()); return dt; } catch (Exception ex) { return dt; } }在WIN7 SERVER2008中获取分区都正常,但是在2012中获取分区返回为空,尝试使用管理员身份运行也不行,求大神帮忙看下是什么地方的问题,是不是SERVER2012中不支持Win32_LogicalDisk,需要换成什么补充,测试是在VM14.1.3的虚拟机中测试的,无法获取温度功耗传感器参数是可以理解的,但是无法获取磁盘分区信息就很奇怪了。编译环境VS2017,.NET4.7
展开
using System;using System.Management; //还需要引用;using System.Collections;using System.Collections.Specialized;using System.Text;namespace WindowsFormsApplication1{region WMIPathpublic enum WMIPath{// 硬件Win32_Processor, // CPU 处理器Win32_PhysicalMemory, // 物理内存条Win32_Keyboard, // 键盘Win32_PointingDevice, // 点输入设备,包括鼠标。Win32_FloppyDrive, // 软盘驱动器Win32_DiskDrive, // 硬盘驱动器Win32_CDROMDrive, // 光盘驱动器Win32_BaseBoard, // 主板Win32_BIOS, // BIOS 芯片Win32_ParallelPort, // 并口Win32_SerialPort, // 串口Win32_SerialPortConfiguration, // 串口配置Win32_SoundDevice, // 多媒体设置,一般指声卡。Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)Win32_USBController, // USB 控制器Win32_NetworkAdapter, // 网络适配器Win32_NetworkAdapterConfiguration, // 网络适配器设置Win32_Printer, // 打印机Win32_PrinterConfiguration, // 打印机设置Win32_PrintJob, // 打印机任务Win32_TCPIPPrinterPort, // 打印机端口Win32_POTSModem, // MODEMWin32_POTSModemToSerialPort, // MODEM 端口Win32_DesktopMonitor, // 显示器Win32_DisplayConfiguration, // 显卡Win32_DisplayControllerConfiguration, // 显卡设置Win32_VideoController, // 显卡细节。Win32_VideoSettings, // 显卡支持的显示模式。// 操作系统Win32_TimeZone, // 时区Win32_SystemDriver, // 驱动程序Win32_DiskPartition, // 磁盘分区Win32_LogicalDisk, // 逻辑磁盘Win32_LogicalDiskToPartition, // 逻辑磁盘所在分区及始末位置。Win32_LogicalMemoryConfiguration, // 逻辑内存配置Win32_PageFile, // 系统页文件信息Win32_PageFileSetting, // 页文件设置Win32_BootConfiguration, // 系统启动配置Win32_ComputerSystem, // 计算机信息简要Win32_OperatingSystem, // 操作系统信息Win32_StartupCommand, // 系统自动启动程序Win32_Service, // 系统安装的服务Win32_Group, // 系统管理组Win32_GroupUser, // 系统组帐号Win32_UserAccount, // 用户帐号Win32_Process, // 系统进程Win32_Thread, // 系统线程Win32_Share, // 共享Win32_NetworkClient, // 已安装的网络客户端Win32_NetworkProtocol, // 已安装的网络协议}endregion/// <summary>/// 获取系统信息/// </summary>/// <example>/// <code>/// WMI w = new WMI(WMIPath.Win32_NetworkAdapterConfiguration);/// for (int i = 0; i < w.Count; i ++)/// {/// if ((bool)w[i, "IPEnabled"])/// {/// Console.WriteLine("Caption:{0}", w[i, "Caption"]);/// Console.WriteLine("MAC Address:{0}", w[i, "MACAddress"]);/// }/// }/// </code>/// </example>public sealed class WMI{private ArrayList mocs;private StringDictionary names; // 用来存储属性名,便于忽略大小写查询正确名称。/// <summary>/// 信息集合数量/// </summary>public int Count{get { return mocs.Count; }}/// <summary>/// 获取指定属性值,注意某些结果可能是数组。/// </summary>public object this[int index, string propertyName]{get{try{string trueName = names[propertyName.Trim()]; // 以此可不区分大小写获得正确的属性名称。Hashtable h = (Hashtable)mocs[index];return h[trueName];}catch{return null;}}}/// <summary>/// 返回所有属性名称。/// </summary>/// <param name="index"></param>/// <returns></returns>public string[] PropertyNames(int index){try{Hashtable h = (Hashtable)mocs[index];string[] result = new string[h.Keys.Count];h.Keys.CopyTo(result, 0);Array.Sort(result);return result;}catch{return null;}}/// <summary>/// 返回测试信息。/// </summary>/// <returns></returns>public string Test(){try{StringBuilder result = new StringBuilder(1000);for (int i = 0; i < Count; i++){int j = 0;foreach (string s in PropertyNames(i)){result.Append(string.Format("{0}:{1}={2}&92;n", ++j, s, this[i, s]));if (this[i, s] is Array){Array v1 = this[i, s] as Array;for (int x = 0; x < v1.Length; x++){result.Append("&92;t" + v1.GetValue(x) + "&92;n");}}}result.Append("======WMI=======&92;n");}return result.ToString();}catch{return string.Empty;}}/// <summary>/// 构造函数/// </summary>/// <param name="path"></param>public WMI(string path){names = new StringDictionary();mocs = new ArrayList();try{ManagementClass cimobject = new ManagementClass(path);ManagementObjectCollection moc = cimobject.GetInstances();bool ok = false;foreach (ManagementObject mo in moc){Hashtable o = new Hashtable();mocs.Add(o);foreach (PropertyData p in mo.Properties){o.Add(p.Name, p.Value);if (!ok) names.Add(p.Name, p.Name);}ok = true;mo.Dispose();}moc.Dispose();}catch (Exception e){throw new Exception(e.Message);}}/// <summary>/// 构造函数/// </summary>/// <param name="path"></param>public WMI(WMIPath path): this(path.ToString()){}}}
追问
引用都添加了,报错不是报在没有引用上ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");&47;&47;这里返回的对象为空ManagementObjectCollection disks = diskClass.GetInstances();&47;&47;这里报错程序在WIN7和SERVER2008执行获取都没问题
J CLASS MANAGEMENT商标总申请量1件其中已成功注册0件,有0件正在申请中,无效注册1件,0件在售中。经八戒知识产权统计,J CLASS MANAGEMENT还可以注册以下商标分类:第1类(化学制剂、肥料)第2类(颜料油漆、染料、防腐制品)第3类(日化用品、洗护、香料)第4类(能源、燃料、油脂)第5类(药品、卫生用品、营养品)第6类(金属制品、金属建材、金属材料)第7类(机械设备、马达、传动)第8类(手动器具(小型)、餐具、冷兵器)第9类(科学仪器、电子产品、安防设备)第10类(医疗器械、医疗用品、成人用品)第11类(照明洁具、冷热设备、消毒净化)第12类(运输工具、运载工具零部件)第13类(军火、烟火、个人防护喷雾)第14类(珠宝、贵金属、钟表)第15类(乐器、乐器辅助用品及配件)第16类(纸品、办公用品、文具教具)第17类(橡胶制品、绝缘隔热隔音材料)第18类(箱包、皮革皮具、伞具)第19类(非金属建筑材料)第20类(家具、家具部件、软垫)第21类(厨房器具、家用器皿、洗护用具)第22类(绳缆、遮蓬、袋子)第23类(纱、线、丝)第24类(纺织品、床上用品、毛巾)第25类(服装、鞋帽、袜子手套)第26类(饰品、假发、纽扣拉链)第27类(地毯、席垫、墙纸)第28类(玩具、体育健身器材、钓具)第29类(熟食、肉蛋奶、食用油)第30类(面点、调味品、饮品)第31类(生鲜、动植物、饲料种子)第32类(啤酒、不含酒精的饮料)第33类(酒、含酒精饮料)第34类(烟草、烟具)第35类(广告、商业管理、市场营销)第36类(金融事务、不动产管理、典当担保)第37类(建筑、室内装修、维修维护)第38类(电信、通讯服务)第39类(运输仓储、能源分配、旅行服务)第40类(材料加工、印刷、污物处理)第42类(研发质控、IT服务、建筑咨询)第43类(餐饮住宿、养老托儿、动物食宿)第44类(医疗、美容、园艺)第45类(安保法律、婚礼家政、社会服务)
Error creating bean with name &39;transactionManager&39; defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean &39;sessionFactory&39; while setting bean property &39;sessionFactory&39;; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &39;sessionFactory&39; defined in class path resource [applicationContext.xml]<bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager" > <property name="sessionFactory" ref="sessionFactory" ></property> </bean><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" > <!-- 将连接池注入到sessionFactory, hibernate会通过连接池获得连接 --> <property name="dataSource" ref="dataSource" ></property> <!-- 配置hibernate基本信息 --> <property name="hibernateProperties"> <props> <!-- 必选配置 --> <!-- <prop key="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</prop> <prop key="hibernate.connection.url" >jdbc:mysql:///crm_32</prop> <prop key="hibernate.connection.username" >root</prop> <prop key="hibernate.connection.password" >1234</prop> --> <prop key="hibernate.dialect" >org.hibernate.dialect.MySQLDialect</prop> <!-- 可选配置 --> <prop key="hibernate.show_sql" >true</prop> <prop key="hibernate.format_sql" >true</prop> <prop key="hibernate.hbm2ddl.auto" >update</prop> </props> </property> <!-- 引入orm元数据,指定orm元数据所在的包路径,spring会自动读取包中的所有配置 --> <property name="mappingDirectoryLocations" value="classpath:cn/itcast/domain" ></property> </bean>
展开
说明你在applicationContext.xml中没有UserDAO,没有依赖注入,或是你注入的名称与你applicationContext.xml中配置的名称不一致,注意在配置文件中是区分大小的。检查一下有没有<bean id="UserDAO">这样的bean
主要运用到System.Management空间中的ManagementClass类,代码如下:using System;using System.Windows.Forms;using System.Management;namespace WinLocalinfo{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { try { string strMac = string.Empty; ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { if ((bool)mo["IPEnabled"] == true) { strMac = mo["MacAddress"].ToString(); } } moc = null; mc = null; listBox1.Items.Add(strMac); } catch { listBox1.Items.Add("unknown"); } } }}
private string[] GetMoc(){string[] str = new string[2];ManagementClass mcCpu = new ManagementClass("win32_Processor");ManagementObjectCollection mocCpu = mcCpu.GetInstances();foreach(ManagementObject m in mocCpu){str[0] = m["ProcessorId"].ToString();}ManagementClass mcHD = new ManagementClass("win32_logicaldisk");ManagementObjectCollection mocHD = mcHD.GetInstances();foreach(ManagementObject m in mocHD){if(m["DeviceID"].ToString() == "C:"){str[1] = m["VolumeSerialNumber"].ToString();break;}}return str;}ManagementClass命名空间是System.Management以上代码用于获取C盘的序列号,而不是硬盘的固有序号.获取硬盘的固有序号:using System; using System.Runtime.InteropServices; namespace ArLi.CommonPrj { region how use this? /* string sVol = getvol.GetVolOf("C"); */ endregion public class getvol{ [DllImport("kernel32.dll")] private static extern int GetVolumeInformation( string lpRootPathName, string lpVolumeNameBuffer, int nVolumeNameSize, ref int lpVolumeSerialNumber, int lpMaximumComponentLength, int lpFileSystemFlags, string lpFileSystemNameBuffer, int nFileSystemNameSize ); public static string GetVolOf(string drvID){ const int MAX_FILENAME_LEN = 256; int retVal = 0; int a =0; int b =0; string str1 = null; string str2 = null; int i = GetVolumeInformation( drvID + @":/", str1, MAX_FILENAME_LEN, ref retVal, a, b, str2, MAX_FILENAME_LEN ); return retVal.ToString("x"); } } }
通过逻辑磁盘符号获取物理磁盘号
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections;using System.Management; namespace Test{ /// <summary> /// Computer Information /// </summary> public class Computer { public string CpuID; public string MacAddress; public string DiskID; public string IpAddress; public string LoginUserName; public string ComputerName; public string SystemType; public string TotalPhysicalMemory; //单位:M private static Computer _instance; public static Computer Instance() { if (_instance == null) _instance = new Computer(); return _instance; } protected Computer() { CpuID=GetCpuID(); MacAddress=GetMacAddress(); DiskID=GetDiskID(); IpAddress=GetIPAddress(); LoginUserName=GetUserName(); SystemType=GetSystemType(); TotalPhysicalMemory=GetTotalPhysicalMemory(); ComputerName=GetComputerName(); } string GetCpuID() { try { //获取CPU序列号代码 string cpuInfo = "";//cpu序列号 ManagementClass mc = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); } moc=null; mc=null; return cpuInfo; } catch { return "unknow"; } finally { } } string GetMacAddress() { try { //获取网卡硬件地址 string mac=""; ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { if((bool)mo["IPEnabled"] == true) { mac=mo["MacAddress"].ToString(); break; } } moc=null; mc=null; return mac; } catch { return "unknow"; } finally { } } string GetIPAddress() { try { //获取IP地址 string st=""; ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { if((bool)mo["IPEnabled"] == true) { //st=mo["IpAddress"].ToString(); System.Array ar; ar=(System.Array)(mo.Properties["IpAddress"].Value); st=ar.GetValue(0).ToString(); break; } } moc=null; mc=null; return st; } catch { return "unknow"; } finally { } } string GetDiskID() { try { //获取硬盘ID String HDid=""; ManagementClass mc = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { HDid = (string)mo.Properties["Model"].Value; } moc=null; mc=null; return HDid; } catch { return "unknow"; } finally { } } /// <summary> /// 操作系统的登录用户名 /// </summary> /// <returns></returns> string GetUserName() { try { string st=""; ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { st=mo["UserName"].ToString(); } moc=null; mc=null; return st; } catch { return "unknow"; } finally { } } /// <summary> /// PC类型 /// </summary> /// <returns></returns> string GetSystemType() { try { string st=""; ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { st=mo["SystemType"].ToString(); } moc=null; mc=null; return st; } catch { return "unknow"; } finally { } } /// <summary> /// 物理内存 /// </summary> /// <returns></returns> string GetTotalPhysicalMemory() { try { string st=""; ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { st=mo["TotalPhysicalMemory"].ToString(); } moc=null; mc=null; return st; } catch { return "unknow"; } finally { } } /// <summary> /// /// </summary> /// <returns></returns> string GetComputerName() { try { return System.Environment.GetEnvironmentVariable("ComputerName"); } catch { return "unknow"; } finally { } } }}
这两个方法是我一直在用的,都可正常获取到IP地址和Mac地址。/// <summary>/// 获取IP地址/// </summary>/// <returns>IP地址</returns>public string GetLocalIP(){try{System.Net.NetworkInformation.NetworkInterface[] nics = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();foreach (System.Net.NetworkInformation.NetworkInterface adapter in nics){if (adapter.NetworkInterfaceType == System.Net.NetworkInformation.NetworkInterfaceType.Ethernet){var mac = adapter.GetPhysicalAddress();System.Net.NetworkInformation.IPInterfaceProperties ip = adapter.GetIPProperties();System.Net.NetworkInformation.UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;foreach (System.Net.NetworkInformation.UnicastIPAddressInformation ipadd in ipCollection){if (ipadd.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork){return ipadd.Address.ToString();}}}}}catch { }return null;}/// <summary> /// 获取本机MAC地址/// </summary> /// <returns>本机MAC地址</returns>public string GetMacAddress(){string mac = "";ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){mac = mo["MacAddress"].ToString().Replace(":", "").Replace("-", "").ToUpper();break;}}moc = null;mc = null;return mac;}
以下是收集的几种C程序读取MAC地址的方法,示例中是读取所有网卡的MAC地址,如果仅需要读取其中一个,稍作修改即可。1 通过IPConfig命令读取MAC地址///<summary>/// 根据截取ipconfig /all命令的输出流获取网卡Mac///</summary>///<returns></returns>publicstatic List<string> GetMacByIPConfig(){List<string> macs =new List<string>();ProcessStartInfo startInfo = new ProcessStartInfo("ipconfig", "/all");startInfo.UseShellExecute = false;startInfo.RedirectStandardInput = true;startInfo.RedirectStandardOutput = true;startInfo.RedirectStandardError = true;startInfo.CreateNoWindow = true;Process p = Process.Start(startInfo);//截取输出流StreamReader reader = p.StandardOutput;string line = reader.ReadLine();while (!reader.EndOfStream){if (!string.IsNullOrEmpty(line)){line = line.Trim();if (line.StartsWith("Physical Address")){macs.Add(line);}}line = reader.ReadLine();}//等待程序执行完退出进程p.WaitForExit();p.Close();reader.Close();return macs;}2 通过WMI读取MAC地址1)该方法依赖WMI的系统服务,该服务一般不会被关闭;但如果系统服务缺失或者出现问题,该方法无法取得MAC地址。///<summary>/// 通过WMI读取系统信息里的网卡MAC///</summary>///<returns></returns>publicstatic List<string> GetMacByWMI(){List<string> macs =new List<string>();try{string mac ="";ManagementClass mc =new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"]){mac = mo["MacAddress"].ToString();macs.Add(mac);}}moc =null;mc =null;}catch{}return macs;}3 通过NetworkInterface读取MAC地址1)如果当前的网卡是禁用状态(硬件处于硬关闭状态),取不到该网卡的MAC地址,(您可以通过禁用网卡进行试验)。2)如果当前启用了多个网卡,最先返回的地址是最近启用的网络连接的信息//返回描述本地计算机上的网络接口的对象(网络接口也称为网络适配器)。publicstatic NetworkInterface[] NetCardInfo(){return NetworkInterface.GetAllNetworkInterfaces();}///<summary>/// 通过NetworkInterface读取网卡Mac///</summary>///<returns></returns>publicstatic List<string> GetMacByNetworkInterface(){List<string> macs =new List<string>();NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface ni in interfaces){macs.Add(ni.GetPhysicalAddress().ToString());}return macs;}4 通过SendARP读取MAC地址///<summary>/// 通过SendARP获取网卡Mac/// 网络被禁用或未接入网络(如没插网线)时此方法失灵///</summary>///<param name="remoteIP"></param>///<returns></returns>publicstaticstring GetMacBySendARP(string remoteIP){StringBuilder macAddress =new StringBuilder();try{Int32 remote = inet_addr(remoteIP);Int64 macInfo =new Int64();Int32 length =6;SendARP(remote, 0, ref macInfo, ref length);string temp = Convert.ToString(macInfo, 16).PadLeft(12, &39;0&39;).ToUpper();int x =12;for (int i =0; i <6; i++){if (i ==5){macAddress.Append(temp.Substring(x -2, 2));}else{macAddress.Append(temp.Substring(x -2, 2) +"-");}x -=2;}return macAddress.ToString();}catch{return macAddress.ToString();}}[DllImport("Iphlpapi.dll")]privatestaticexternint SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);[DllImport("Ws2_32.dll")]privatestaticextern Int32 inet_addr(string ip);5 从注册表读取MAC地址常规用户可通过读取注册表项Windows Genuine Advantage获取到物理网卡地址。1)如果注册表项被修改,则无法取得该MAC地址HKEY_LOCAL_MACHINE&92;Software&92;Microsoft&92;Windows Genuine Advantage
如下图,不知道为什么会这样
不需要的,tag属性都是默认的。
代码给你吧string name = Environment.UserName;string fullname;ManagementClass account = new ManagementClass("Win32_UserAccount");ManagementObjectCollection acc = account.GetInstances();foreach (ManagementObject obj in acc){if (obj.Properties["Name"].Value.ToString() == name){fullname = obj.Properties["FullName"].Value.ToString();}}