タスクスケジューラでWinActorを実行する際に、先行シナリオが失敗した状況を後続シナリオで検知する

スポンサーリンク

Windowsのタスクスケジューラを使って、定期的にWinActorのシナリオを実行する場合があると思います。

複数のシナリオをタスクスケジューラで実行するとして、それぞれ独立した処理であれば影響はありませんが、複数シナリオ間で関係性があると、先行タスクの失敗に備えて後続タスクを抑止する必要があります。

今回は複数のシナリオをタスクスケジューラーで実行する場合の実装を考えてみます。

WinActor7からは複数シナリオを制御出来るみたいなので、WinActor6限定の内容となると思いますが、予めご了承ください。 [追記] WinActor 7では複数シナリオを開けるだけでした。複数実行は出来ません。

環境

以下の環境で確認しました。

  • Windows 10 Pro (20H2)
  • WinActor 6.3.1

前提条件

  • シナリオ1(test_1.ums6)、シナリオ2(test_2.ums6)を実行する
  • タスクスケジューラにタスクをそれぞれ登録する
  • シナリオ2はシナリオ1が正常終了した後に実行する必要がある
  • シナリオ起動用にvbsを用意する

ファイルの構成としては以下の図のような状態です。runscript配下に起動用のVBSが入っています。

この前提条件の場合に、シナリオ起動を抑止する必要がある状況を考えてみました。

先行シナリオ(シナリオ1)後続シナリオ(シナリオ2)実行抑止が必要な場所
状況1待ち状態シナリオ1が途中で停止し、「待ち」の状態になっている状況
例)何かしらのダイアログが出ている。WinActorは起動したまま。
シナリオ2用にタスク実行を行おうとするが、WinActorが複数のシナリオを同時実行出来ないため、シナリオ2は起動しない。タスク実行時
状況2異常終了シナリオ1の実行中にエラーが発生したが、WinActorは終了した。シナリオは正常に処理出来ていない。シナリオ2は実行されるが、シナリオ1が正常終了していないため、期待した結果を得る事が出来ない。タスク実行時、または、シナリオ実行時

状況1ではタスクスケジューラに登録したタスクで実行を抑止する必要があり、状況2ではタスクまたはWinActor側で考慮する必要がありそうです。

起動ショートカットの作成

まず、タスクスケジューラ実行で必要な「起動ショートカット」を作成します。

WinActorのシナリオにて、[設定]-[起動ショートカット作成]を選択すると、タスクスケジューラで実行できるvbsファイルが作成出来ます。「WinActor タスクスケジューラ」で検索すると方法がヒットしますので、詳細は割愛します。

以下のようなファイルが作成されました。シナリオ1、シナリオ2、双方で作成しました。

WINACTOR_PATH="""<winactorのパス>\WinActor.exe"""
WINACTOR_OPT="-f ""<シナリオのパス>\test_1.ums6"" -r -e"
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExec = objShell.Exec(WINACTOR_PATH & " " & WINACTOR_OPT)

token

状況1ではWinActorを実行する前に抑止する必要がありました。

シナリオが実行中、または、エラーで終了したかどうかをチェックするために、token という空ファイルを利用してみます。シナリオ内で、起動後にtokenを作成し、正常終了後にtokenを削除する処理になります。

tokenのチェックを入れた起動ファイルは以下のようにしてみました。

WINACTOR_PATH="""<winactorのパス>\WinActor.exe"""
WINACTOR_OPT="-f ""<シナリオのパス>\test_1.ums6"" -r -e"
'Set objShell = WScript.CreateObject("WScript.Shell")
'Set objExec = objShell.Exec(WINACTOR_PATH & " " & WINACTOR_OPT)

'tokenが存在するかチェック
Set objFso = CreateObject("Scripting.FileSystemObject")
ret = objFso.FileExists("<シナリオのパス>\token")
 
'メッセージボックス表示
If ret = True Then

  MyVar = MsgBox ("token file found", 16, "scinario1")

Else

  Set objShell = WScript.CreateObject("WScript.Shell")
  Set objExec = objShell.Exec(WINACTOR_PATH & " " & WINACTOR_OPT)

End If

シナリオ1、シナリオ2用のVBSファイルをそれぞれ修正しました。メッセージ(MsgBox)は適当です。このVBSにする事で、tokenファイルが存在する場合は、WinActorを起動しない。という処理が実現できます。

シナリオ1、2にtoken処理を入れる

状況1、状況2に対処するため、シナリオにtoken関連の処理を入れます

まずは全体の流れをどうぞ。

右側の「先行タスク終了チェック」にて、tokenの存在確認を行い、存在しない場合は”実行中を示すための”tokenファイル作成します。tokenが既に存在する場合はエラーにしています。

左側の「実行アクション」内に本来行う処理を入れます。正常終了時にtokenファイルを削除しています。

「実行アクション」内でエラーが発生した場合、異常系でWinActorを終了させます。これでtokenファイルが存在する状況になります。

tokenと状況の関係

tokenと状況をまとめると以下のようになります。

token状況
ないシナリオ実行可能
ある他のシナリオが実行中、または、先行するシナリオがエラーで終了した

各アクションの内容

全体の流れのそれぞれのアクションの内容を貼り付けておきます。

まとめ

tokenの仕組みを入れる事で、状況1、状況2に備える事が出来そうです。また、シナリオ実行時はtokenファイルが存在するため、同時実行の抑止も出来るという内容となりました。

他の実装もあると思いますので、いろいろと試してみてください。

タイトルとURLをコピーしました