2016-04-27 10 views
1

Ich habe Probleme beim Herstellen einer Verbindung zu einem Remotecomputer, um eine Liste der laufenden Prozesse abzurufen. Für meine Testmaschine benutze ich den Benutzernamen @ "ownme \ veritas". Das Passwort ist nur "Veritas". Die Beispieldomäne ist "Ownme".Zugriff verweigert für .Net GetProcesses

return new System.Management.ConnectionOptions() 
{ 
    //certainly these variables have been checked and are correct 
    Username = UserCredential.DomainUser, 
    Password = UserCredential.Password 
}; 

Hier versuche ich die Verbindung herzustellen. Ich weiß es nicht, aber das könnte tatsächlich das Problem hier sein. Es könnte auch sein, dass ich in den obigen ConnectionOptions nicht genügend Felder ausgefüllt habe. I bezeichnet diese beiden Artikel:

https://www.experts-exchange.com/questions/23514935/How-to-use-GetProcess-for-remote-sytems.html

https://msdn.microsoft.com/en-us/library/system.management.connectionoptions.authentication.aspx

ich nicht herausfinden können, was mache ich falsch

ManagementScope scope = new ManagementScope($"\\\\{computer.DnsHostname}\\root\\cimv2", connectionOptions); 
scope.Connect(); 

//Error: Access is denied 
var processes = System.Diagnostics.Process.GetProcesses(dnsHostName); 
+0

Sie sind für Ihre GetProcesses Abfrage nicht mithilfe von WMI –

+0

@YacoubMassad, dachte ich, Der zugrunde liegende Prozess verwendet WMI. – Bluebaron

Antwort

0

GetProcesses die aktuellen Benutzer-Anmeldeinformationen verwenden, um eine Verbindung an den Remote-Computer, nicht die Anmeldeinformationen, die Sie über ConnectionOptions angegeben haben.

Sie müssen das WMI-Bereichsobjekt verwenden, die Sie mit den richtigen Anmeldeinformationen erstellt eine Abfrage für die Prozesse so zu erteilen:

//.. 

SelectQuery query = new SelectQuery("select * from Win32_Process"); //query processes 

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) 
{ 
    using (ManagementObjectCollection collection = searcher.Get()) 
    { 
     foreach (var process in collection) //loop through results 
     { 
      var name = process["name"]; //process name 
      //Do something with process 
     } 
    } 
} 
+0

Was passiert, wenn ich mich als Benutzer ausgeben? – Bluebaron

+0

Imitieren funktioniert. Vielen Dank. – Bluebaron

Verwandte Themen