2009-02-25 83 views
0

我用下面这段代码来改变打印机的“端口”属性。问题是执行时间超过一分钟。 有没有办法加快速度? 我可以实例化管理对象不与wmi对象的所有属性?更重要的是,我如何更新只有1个属性? 也许我应该没有搜索者实例化管理对象?更新win32_printer管理对象需要这么长时间

ManagementPath mPath = new ManagementPath(); 
mPath.Server = Server.TrimStart(new char[] {'\\'}); 
mPath.NamespacePath = "root\\cimv2"; 
ManagementScope mScope = new ManagementScope(); 
mScope.Options.Impersonation = ImpersonationLevel.Impersonate; 
mScope.Path = mPath; 
SelectQuery sQ = new SelectQuery(); 
sQ.ClassName = "Win32_Printer"; 

//sQ.SelectedProperties.Add("PortName"); 
//sQ.SelectedProperties.Add("DeviceID"); 

sQ.Condition = string.Format("Name=\"{0}\"", Name); 

ManagementObjectSearcher s = new ManagementObjectSearcher(mScope, sQ); 
foreach (ManagementObject service in s.Get()) 
{ 
string oldname = service.Properties["PortName"].Value.ToString(); 
service.Properties["PortName"].Value = PortName; 
service.Put(); 
this.Port = PortName; 
return true; 

} 

回答

0
ManagementPath mPath = new ManagementPath() ; 
     mPath.NamespacePath = "root\\cimv2"; 
     mPath.Server = Server.TrimStart(new char[] { '\\' }); 
     mPath.RelativePath = "Win32_Printer.DeviceID=\"" + Name + "\""; 
     ManagementObject Printer = new ManagementObject(mPath); 
     string oldname = Printer.Properties["PortName"].Value.ToString(); 
     Printer.Properties["PortName"].Value = PortName; 
     Printer.Put(); 

这一个工程更快,但我认为它可以进一步提高。

相关问题