Kill Processとかプロセス名を指定していちいち組み込むのが面倒だし、なにより作成者にルールとして守らせるのも酷なので、「そのロボットが実行中に開始したプロセス”だけ”をKillするxamlパーツ」を作成してみた。Userは、何も考えずに、そのワークフローを呼ぶだけでいいようなつくりにする。
#そもそもLibraryかProcessか問題
部分的なパーツとして配布する場合、Libraryとして中身をわからなくしてもいいけど、今回はUserみんなにも中身を知ってほしいので、あくまでinvokeする必要のあるxamlとして配布することにした(invokeも使ってほしいしね。。。あと、PackageのManageとかも面倒そうだし。。。)
#基本的な構造
①AssignでSystem.Diagnostics.Process.GetProcesses()で実行中のすべてのプロセスを取得し
②OpenBrowserでBrowserを開き
③Tryの中で実行中のプロセスの中から、UiPath.Executor.exeをProcessオブジェクトとして取得
④開始時刻(Process.StartTimeオブジェクトで事前に取得済)よりも前(DateTimeの比較演算)のものをKill
(↓はKillするところまで:Write Lineのところ)
#問題とその解決
デバック実行中に(ここ大事)問題が発生。最初の数件のProcessにはアクセスできるけど、権限の関係上アクセス不可能なものがある。Tryで握りつぶして解決(したことにする)。
以下、コミュニティでの私の質問と、根本的な原因を示してくださった方の解答です。なんでも
""
デバッグ実行では、アクティビティ単位で例外の検出をしているので、Try-Catchが補足する前に、例外を補足してしまったためメッセージが出ます。ここで単に続行とすると、外側のTry-Catchで補足してくれて、そのまま処理が進むと思います。
""
とのことでした。なんとも足元をすくわれたような感覚。。。
https://forum.uipath.com/t/uipath-executor-exe-kill/176831/9?u=haguruma
近々社内に配布しよう!してみる。しようっかな。。。きっとする。。。。