2009-02-25 57 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(); 

這一個工程更快,但我認爲它可以進一步提高。

相關問題