UiPath.Executor.exeプロセスの開始以降に開かれたアプリケーションのKill

UiPath.Executor.exe(UiPathの実行)プロセスが立ち上がってから、xamlの内部で新しく開かれたプロセスをすべてKillしようとしています。しかしうまくいかずに困っています。
具体的には、
①AssignでSystem.Diagnostics.Process.GetProcesses()で実行中のすべてのプロセスを取得し
②OpenBrowserでBrowserを開き
③Tryの中で実行中のプロセスの中から、UiPath.Executor.exeをProcessオブジェクトとして取得
④開始時刻(Process.StartTimeオブジェクトで事前に取得済)よりも前(DateTimeの比較演算)のものをKillしようとしています。
しかし④で一つのプロセスも取得できない状況です。理想的には②で開いたBrowserのProcessを取得したいのですが。。。どなたか教えていただけますでしょうか。xaml添付します

1 Like

こんにちは

④は開始時刻の後でしょうか?
xamlが添付されていませんが、大まかな流れは以下のような感じになるのではないかと思います。

arrExecutorPs = System.Diagnostics.Process.GetProcessesByName("UiPath.Executor")
dtExecutor = arrExecutorPs(0).StartTime
arrAllPs = System.Diagnostics.Process.GetProcesses()
foreach (prrocess item in arrAllPs){
 try{
   dtStart=item.StartTime
   if (dtStart>dtExecutor) {
      // something to do
   }

  }catch{

 }

}

Yoichiさん

こんにちは。すいません。おっしゃる通り、UiPath.Executorの開始時刻の後です。
ご提示いただいたコードと同様のものを組んでみました。しかし、ForEachのなかで「特定のプロセスにアクセスしようとすると拒否られる」みたいです。画像と、実際に動かしてみたxamlを添付させていただきますので、どうかご査収ください。

すいません、xaml添付しようとしましたが、「新規Userは添付不可」とでましたので、画像にします

こんにちは

そのプロセスは、当該ユーザーと異なる権限で動いているので、値を取得できません。
今回のケースでは無視して良いものかとおもうので、try で捕捉して、なにもせずに次に移ると良いと思います。(提示しました流れの中でtry-catchを入れているのはこれのためです)

Yoichiさん

ありがとうございます。エラーを吐いたAssign自体、すでにTryの中なのですが、このAssign自体もまたTryで握りつぶすという理解でよろしいでしょうか?

こんにちは

入れ違いで返信してしまいました。
添付で問題なさそうですが...
tryで補足していませんでしょうか?
デバッグ実行でお試しなら、一度通常実行で試してみてください。

Yoichiさん

無事、普通に実行したらうごきました!(そして無事InvokeMethodでKillを呼び出し、プロセスのKillもできました!!)本当にありがとうございました。

ここからは余談というか、、、。
今回の事象は(デバック実行ではうまくいかなかった理由は)なにが原因なのでしょうか?後学のために教えていただければ幸いです。

1 Like

こんにちは

デバッグ実行では、アクティビティ単位で例外の検出をしているので、Try-Catchが補足する前に、例外を補足してしまったためメッセージが出ます。ここで単に続行とすると、外側のTry-Catchで補足してくれて、そのまま処理が進むと思います。

あるいはStudio側のオプションで、例外時に中断 のチェックを外すとデバッグ時でもここで止まらずに進むと思います。

1 Like

Yoichiさん

さっき、このAssign自体にまたTryをかける遊びをしてみましたが、やはり例外として握りつぶされました(Yoichiさんの↑のコメントを裏付けるものだと思います)
今回は助かりました。ありがとうございました!!!

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.