• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[C#]リモートアクセスのProcess取得で「アクセス拒否」)

[C#]リモートアクセスのProcess取得で「アクセス拒否」

このQ&Aのポイント
  • 現在、PCのプロセスを取得するプログラムを作っています。
  • しかし、リモートコンピューターからGetProcessesByNameでプロセスを取得しようとすると、アクセス拒否の例外が出てしまいます。
  • アクセスが拒否されないために必要な条件やエラー回避策、ヒントを教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

回さないで取る方法がありました。 先ほどの延長で、 targetProcess = Process.GetProcesses(端末A); targetProcess2 = targetProcess(0).GetProcessesByName("iexplore",端末A); としたら、取得できました。 ※端末AはAdmin権限あり GetProcessesByNameを実行するプロセスオブジェクトが、その端末にないとダメっぽいですね^^

ohnotellme
質問者

お礼

権限の問題で、スタンドアロンなアプリからはリモートのプロセスをとるのは難しいようですね。 TCP(?)を使うような、ネットワーク型アプリに手法を切り替えてみたいと思います。 ありがとうございました!

その他の回答 (1)

回答No.1

私の環境 「たくさんのXPProたちで構成された、ドメイン環境」 端末A・・・私のドメインユーザで、Admin権限のあるPC 端末B・・・私のドメインユーザで、Admin権限のないPC GetProcessesByName やってみました。 引数:端末A・・・エラーは発生しませんでしたが、取得プロセス数が0 引数:端末B・・・あなたと同様のエラー となりました そこで Process.GetProcessesByName("ほげ "端末") ではなく Process.GetProcesses("端末") を実行してみました。 引数:端末A・・・全プロセスが取得できました 引数:端末B・・・さきほどと同様のエラー となりました。 リモートなので、やはり権限が絡むのは必須だと思います。 プロセス名を指定しての取得方法は、どうやるんでしょうね^^;

ohnotellme
質問者

お礼

ありがとうございます! 残念ながら、私の環境ではadmin権限のあるPCが私のPCしかないので、実験できません。 プロセスが取得できて、特定のプロセスを見たい場合、全ての配列を順番にみて、見たいプロセス名がある配列要素番号を把握する破目になるのかな? Process [] targetProcess = Process.GetProcesses(リモートコンピューター名); if(targetProcess != null && targetProcess.Length >= 1){  for(int i=0;i<targetProcess.Length;i++){   Debug.WriteLine(i + ":" + targetProcess[i].ProcessName);  } } 私の方では、他のPCに特定のソフトで処理をさせることが多々あるため、その終了を知りたい、ということがあり、取得したプロセスからスレッドを引き出して、スレッドの状況をみることで、処理が実行中か否か、というのを知ろうと思ってたのですが。。。 リモートに対する処理は、難しいのですね。。。

関連するQ&A

専門家に質問してみよう