2016-04-27 32 views
1

実行中のプロセスのリストを取得するためにリモートコンピュータに接続できません。 私のテストマシンでは、私はユーザー名@ "ownme \ veritas"を使用しています。パスワードは単に "veritas"です。 サンプルドメインは "ownme"です。.Net GetProcessesのアクセスが拒否されました

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

ここで私は接続しようとしています。私は知らないが、実際にはこれがここで問題になるかもしれない。また、上記のConnectionOptionsに十分なフィールドを記入しなかった可能性もあります。 私は、これら二つの記事を参照:私は私がやっているかを把握することはできません

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

間違っ

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

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

あなたのGetProcessesクエリ –

+0

@YacoubMassadためにWMIを使用していない、私は思いました基礎となるプロセスはWMIを使用しました。 – Bluebaron

答えて

0

GetProcesses接続するために、現在のユーザーの資格情報を使用します。リモートマシンには、ConnectionOptionsで指定した認証情報ではありません。

あなたはこのようなプロセスのためのクエリを発行するために、正しい資格情報を使用して作成したWMIスコープオブジェクトを使用する必要があります。

//.. 

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

ユーザーを偽装するとどうなりますか? – Bluebaron

+0

偽装しました。ありがとう。 – Bluebaron