2016-02-03 1 views
0

Je tente de mettre à jour une instance WMI en utilisant C# suivant un exemple dans MSDN, mais je n'arrive pas à le faire fonctionner. Il me lance une 'System.Management.ManagementException' qui ne me donne aucune réponse. Pouvez-vous s'il vous plaît me dire si je fais quelque chose de mal?Échec de la mise à jour de l'instance WMI

public void UpdateInstance(string parametersJSON) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     object result = serializer.Deserialize(parametersJSON, typeof(object)); 
     Dictionary<string, object> dic = (Dictionary<string, object>)result; 

     PutOptions options = new PutOptions(); 
     options.Type = PutType.UpdateOnly; 

     ManagementObject objHostSetting = new ManagementObject(); 
     objHostSetting.Scope = new ManagementScope("root\\onguard"); 
     objHostSetting.Path = new ManagementPath("Lnl_Cardholder.SSNO = '33263085'"); // This is the line that fires the exception 

     foreach (KeyValuePair<string, object> value in dic) 
     { 
      objHostSetting[value.Key] = value.Value.ToString(); 
     } 

     //update the ManagementObject 
     objHostSetting.Put(options); 
    } 

Répondre

0

J'ai changé mon code pour cela et fonctionne maintenant:

public void UpdateInstance(string scope, string query, string parametersJSON) 
     { 
      WindowsImpersonationContext impersonatedUser = WindowsIdentity.GetCurrent().Impersonate(); 

      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      object result = serializer.Deserialize(parametersJSON, typeof(object)); 

      Dictionary<string, object> dic = (Dictionary<string, object>)result; 

      ManagementObjectSearcher searcher; 
      searcher = new ManagementObjectSearcher(scope, query); 

      EnumerationOptions options = new EnumerationOptions(); 
      options.ReturnImmediately = true; 

      foreach (ManagementObject m in searcher.Get()) 
      { 
       foreach (KeyValuePair<string, object> k in dic) 
       { 
        m.Properties[k.Key].Value = k.Value; 
       } 

       m.Put(); 
      } 
     }