一つのプロセスを複数のマシンに紐づけどこからでも実行できるようにしたが、アクセスするリソースが同じなどの理由から同時には動かしてほしくない、そんな時の実装。OC側でも制御出来そうだが、今回はxaml側に設定する。
実装
コード全体がこちら。
OCにアクセスして実行中のジョブを取得し、自身と同じプロセス名のジョブが2件以上実行中であればエラーにするという仕組み。この仕様上、同タイミングに両方開始された場合はどちらもエラーになる。
「ジョブを取得」のフィルターで「ステート = Running」の設定を行い、実行中のジョブだけ取得する。余談だがここの設定はビルダーが実装されたお陰で昔に比べだいぶ簡単になった。
「ジョブを取得」はOrchestratorJob
変数をコレクションで、「現在のジョブの情報を取得」はCurrentJobInfo
変数を単体で返す。型は違うが、どちらも.ProcessName
メソッドでプロセス名を取得することができる。
あとは、繰り返しアクテビティで「ジョブを取得」が返したコレクションの中に「現在のジョブの情報を取得」で取得した自身のプロセス名と同一のジョブが何件あるかを探査する。結果が1件であれば実行されてるのが自身のジョブだけ、2件以上あれば自身以外にも同一のプロセス名のジョブが実行されているということになる。
参考