代码之家  ›  专栏  ›  技术社区  ›  Alexander Taran

更新win32_打印机管理对象需要很长时间

  •  0
  • Alexander Taran  · 技术社区  · 16 年前

    我使用以下代码更改打印机的“端口”属性。问题是它的执行时间超过了一分钟。 有办法加快速度吗? 我是否可以实例化管理对象,而不是使用WMI对象的所有属性?更重要的是,如何只更新1个属性? 也许我应该在不使用搜索器的情况下实例化ManagementObject?

    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;
    
    }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Alexander Taran    16 年前
      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();
    

    这一个工作更快,虽然我认为它可以进一步改进。