2008-11-19 5 views
0

Essayer de trouver le produit est installé dans pC à distance ou non, il faut beaucoup de temps à exécuter, y at-il des moyens que nous pouvons y parvenir plus rapidement. // utilisation: // uninstall4 ("hostname", "productname", "{AC9C1263-2BA8-4863-BE18-CE42}", "10.0.0.69");trouver un produit particulier présent dans un système distant ou pas

public void uninstall4(string targetServer, string product,string guid , string version) 
    { 
     //Connect to Server 
     System.Management.ConnectionOptions connoptions = new System.Management.ConnectionOptions(); 
     connoptions.Impersonation = System.Management.ImpersonationLevel.Impersonate; 
     connoptions.Timeout = new TimeSpan(0, 0, 10); // 10 seconds 
     System.Management.ManagementScope scope = new System.Management.ManagementScope(@"\\" + targetServer + @"\root\cimv2", connoptions); 
     scope.Connect(); 

     string q = "select * from Win32_Product where name = '" + product + "' and IdentifyingNumber='"+guid+"' and version = '"+version+"'"; 

     System.Management.SelectQuery query = new System.Management.SelectQuery(q); 

     System.Management.EnumerationOptions options = new System.Management.EnumerationOptions(); 
     options.EnumerateDeep = false; 
     options.ReturnImmediately = false; 
     options.DirectRead = true; 

     using (System.Management.ManagementObjectSearcher searcher 
      = new System.Management.ManagementObjectSearcher(scope, query, options)) 
     { 
      using (System.Management.ManagementObjectCollection moc = searcher.Get()) 
      { 
       if(moc == null || moc.Count == 0) 
       { 
        throw new Exception("product Not Found"); 
       } 

      } 
     } 

    } 

Répondre

2

Nope. Le fournisseur de la classe Win32_Product doit générer les informations de façon dynamique lorsque vous l'interrogez, et c'est toujours, toujours lent.