CELFアプリの終了判定について
2022-12-27 13:45
CELFアプリの終了判定方法について教えてください。
バッチファイルでURLを指定してCELFアプリを起動した後、同じバッチファイルの処理内でCELFアプリの終了を判定したいと考えています。
判定方法として、ログファイル「rpa-yyyymmdd.log」の情報からCELFアプリの終了を判定できないかと考えていますが、判定可能でしょうか。
判定可能な場合、ログファイル「rpa-yyyymmdd.log」に出力されるCELFアプリの終了を示すキーワードを教えてください。
判定不可能な場合、どのようにしたらCELFアプリの終了を判定できるか、判定方法を教えてください。
回答を投稿するにはログインが必要です。
日本コンピュータシステム様
早々にご回答いただきありがとうございます。
アプリ名で条件確認した方が確実かもしれないとのこと、承知いたしました。
様々なケースで、アプリ名を使って終了判定可能か試してみようと思います。
どうもありがとうございました。
早々にご回答いただきありがとうございます。
アプリ名で条件確認した方が確実かもしれないとのこと、承知いたしました。
様々なケースで、アプリ名を使って終了判定可能か試してみようと思います。
どうもありがとうございました。
日本コンピュータシステム(CELFチーム)
パートナー
ベストアンサー
弊社環境で確認しましたが、Curl RTEが起動していない初回起動の場合、処理終了後は「N/A」になるケースがあるようです。その為、「Curl コントロールパネル」だと該当しないケースがあるようですので、アプリ名で条件確認した方が確実だと思います。
日本コンピュータシステム(CELFチーム)
パートナー
ご確認有難う御座います。
本件ではじめて「surge.exe」を調査しましたので、CELFの自動起動処理でCELF RPAを実行した場合、CELF RPA終了後はプロセス「surge.exe」の「ウィンドウタイトル」は必ず「Curl コントロールパネル」になるかはわかりません。
弊社環境では「Curl コントロールパネル」になっていたので、条件に利用しましたが、CELF RPA実行中はプロセス「surge.exe」の「ウィンドウタイトル」が「実行しているアプリケーションの名前」になるのであれば、「実行しているアプリケーションの名前」を条件に利用した方が宜しいかと思います。
本件ではじめて「surge.exe」を調査しましたので、CELFの自動起動処理でCELF RPAを実行した場合、CELF RPA終了後はプロセス「surge.exe」の「ウィンドウタイトル」は必ず「Curl コントロールパネル」になるかはわかりません。
弊社環境では「Curl コントロールパネル」になっていたので、条件に利用しましたが、CELF RPA実行中はプロセス「surge.exe」の「ウィンドウタイトル」が「実行しているアプリケーションの名前」になるのであれば、「実行しているアプリケーションの名前」を条件に利用した方が宜しいかと思います。
日本コンピュータシステム様
追加の回答ありがとうございます。
「tasklist」コマンドでプロセス「surge.exe」の「ウィンドウタイトル」が「Curl コントロールパネル」になるタイミングで終了したと判定するBATファイルを試してみました。
結果、上手く終了判定できる場合とできない場合があります。
CELFの自動起動処理後、「tasklist /v |findstr "surge.exe"」でCELF RPA実行中から終了後までの様子を確認したところ、以下のような状態になっていました。
■上手く終了判定できなかったケース
CELF RPA実行中:「ウィンドウタイトル」が「実行しているアプリケーションの名前」となる
CELF RPA終了後:「ウィンドウタイトル」が「N/A」や「MENU」などになる
■上手く終了判定できたケース
CELF RPA実行中:「ウィンドウタイトル」が「実行しているアプリケーションの名前」となる
CELF RPA終了後:「ウィンドウタイトル」が「Curl コントロールパネル」となる
CELFの自動起動処理でCELF RPAを実行した場合、CELF RPA終了後はプロセス「surge.exe」の「ウィンドウタイトル」は必ず「Curl コントロールパネル」になるものなのでしょうか。
上手く終了判定できたケースでは、BATファイルからCELFの自動起動処理でCELF RPAを実行する直前に、デスクトップ上でCELFにログイン後、「使用可能なアプリ一覧」からアプリを手動で実行していました。
「使用可能なアプリ一覧」からアプリを手動で実行した際は、アプリ終了後にCELFをログアウトしたり、ログアウトせずに画面を閉じると、プロセス「surge.exe」の「ウィンドウタイトル」が「Curl コントロールパネル」となることは確認できています。
なお、CELF RPA実行中はプロセス「surge.exe」の「ウィンドウタイトル」が「実行しているアプリケーションの名前」となるようですが、実行するアプリケーション名が分かっている場合は、BATファイルでプロセス「surge.exe」の「ウィンドウタイトル」が「実行しているアプリケーションの名前」のものが無くなるタイミングで終了したと判定することが可能ではないかと考えています。
上記仕組みで終了を判定する場合、何か懸念点などございますでしょうか。
追加の回答ありがとうございます。
「tasklist」コマンドでプロセス「surge.exe」の「ウィンドウタイトル」が「Curl コントロールパネル」になるタイミングで終了したと判定するBATファイルを試してみました。
結果、上手く終了判定できる場合とできない場合があります。
CELFの自動起動処理後、「tasklist /v |findstr "surge.exe"」でCELF RPA実行中から終了後までの様子を確認したところ、以下のような状態になっていました。
■上手く終了判定できなかったケース
CELF RPA実行中:「ウィンドウタイトル」が「実行しているアプリケーションの名前」となる
CELF RPA終了後:「ウィンドウタイトル」が「N/A」や「MENU」などになる
■上手く終了判定できたケース
CELF RPA実行中:「ウィンドウタイトル」が「実行しているアプリケーションの名前」となる
CELF RPA終了後:「ウィンドウタイトル」が「Curl コントロールパネル」となる
CELFの自動起動処理でCELF RPAを実行した場合、CELF RPA終了後はプロセス「surge.exe」の「ウィンドウタイトル」は必ず「Curl コントロールパネル」になるものなのでしょうか。
上手く終了判定できたケースでは、BATファイルからCELFの自動起動処理でCELF RPAを実行する直前に、デスクトップ上でCELFにログイン後、「使用可能なアプリ一覧」からアプリを手動で実行していました。
「使用可能なアプリ一覧」からアプリを手動で実行した際は、アプリ終了後にCELFをログアウトしたり、ログアウトせずに画面を閉じると、プロセス「surge.exe」の「ウィンドウタイトル」が「Curl コントロールパネル」となることは確認できています。
なお、CELF RPA実行中はプロセス「surge.exe」の「ウィンドウタイトル」が「実行しているアプリケーションの名前」となるようですが、実行するアプリケーション名が分かっている場合は、BATファイルでプロセス「surge.exe」の「ウィンドウタイトル」が「実行しているアプリケーションの名前」のものが無くなるタイミングで終了したと判定することが可能ではないかと考えています。
上記仕組みで終了を判定する場合、何か懸念点などございますでしょうか。
日本コンピュータシステム(CELFチーム)
パートナー
CELFの自動起動処理部分とWAITタイムを追加しました。
CELFが起動した後、サービスの起動が落ち着くまでに少々時間がかかるようですので、5秒ほどWAITタイムを入れています。
■bat内容
@echo off
rundll32.exe url.dll FileProtocolHandler "curl://offline/curl://launch/https://cloud.celf.jp:443/celf/start.dcurl?app_id=XXXX&company=XXXXXXXXX&user=XXXXXX&password=XXXXXXX"
rem サービスの起動が落ち着くまで5秒待つ
timeout /t 5 > nul
rem プロセスチェック
set count=0
rem Curlが起動しているか確認
tasklist /v |findstr "surge.exe" > null
if %errorlevel% == 1 (
goto :end
)
rem CELFが停止したか確認
:loop
rem カウンターを+1する
set /a count+=1
tasklist /v |findstr "surge.exe" |findstr "Curl コントロールパネル" > null
if %errorlevel% == 1 (
echo CELFは起動しています。%count%回目のループです。
) else (
goto :end
)
rem 「loop」ラベルに戻る
goto :loop
:end
echo END
exit /b 99
CELFが起動した後、サービスの起動が落ち着くまでに少々時間がかかるようですので、5秒ほどWAITタイムを入れています。
■bat内容
@echo off
rundll32.exe url.dll FileProtocolHandler "curl://offline/curl://launch/https://cloud.celf.jp:443/celf/start.dcurl?app_id=XXXX&company=XXXXXXXXX&user=XXXXXX&password=XXXXXXX"
rem サービスの起動が落ち着くまで5秒待つ
timeout /t 5 > nul
rem プロセスチェック
set count=0
rem Curlが起動しているか確認
tasklist /v |findstr "surge.exe" > null
if %errorlevel% == 1 (
goto :end
)
rem CELFが停止したか確認
:loop
rem カウンターを+1する
set /a count+=1
tasklist /v |findstr "surge.exe" |findstr "Curl コントロールパネル" > null
if %errorlevel% == 1 (
echo CELFは起動しています。%count%回目のループです。
) else (
goto :end
)
rem 「loop」ラベルに戻る
goto :loop
:end
echo END
exit /b 99
日本コンピュータシステム(CELFチーム)
パートナー
以下の様なBATファイルを利用すればCELFRPAの終了判定が行なえると思います。
以下の方法はCMDの「tasklist」でCELFが起動しているか確認し、停止したら戻り値「99」を返す方法になります。
CELFは「surge.exe」で起動しているのですが、CELFの画面を閉じても「surge.exe」は停止しないので、強引ではありますが「tasklist」の「ウィンドウタイトル」が「Curl コントロールパネル」になるタイミングで終了したと判定する仕組みになっています
CELF画面を閉じると「ウィンドウタイトル」が「CELF」から「Curl コントロールパネル」に変わります。
こちらの環境で試しただけなので調整は必要になるかと思いますが、お試しいただけばと思います。
■batファイル
@echo off
rem プロセスチェック
set count=0
rem Curlが起動しているか確認
tasklist /v |findstr "surge.exe" > null
if %errorlevel% == 1 (
goto :end
)
rem CELFが停止したか確認
:loop
rem カウンターを+1する
set /a count+=1
tasklist /v |findstr "surge.exe" |findstr "Curl コントロールパネル" > null
if %errorlevel% == 1 (
echo CELFは起動しています。%count%回目のループです。
) else (
goto :end
)
rem 「loop」ラベルに戻る
goto :loop
:end
echo END
exit /b 99
以下の方法はCMDの「tasklist」でCELFが起動しているか確認し、停止したら戻り値「99」を返す方法になります。
CELFは「surge.exe」で起動しているのですが、CELFの画面を閉じても「surge.exe」は停止しないので、強引ではありますが「tasklist」の「ウィンドウタイトル」が「Curl コントロールパネル」になるタイミングで終了したと判定する仕組みになっています
CELF画面を閉じると「ウィンドウタイトル」が「CELF」から「Curl コントロールパネル」に変わります。
こちらの環境で試しただけなので調整は必要になるかと思いますが、お試しいただけばと思います。
■batファイル
@echo off
rem プロセスチェック
set count=0
rem Curlが起動しているか確認
tasklist /v |findstr "surge.exe" > null
if %errorlevel% == 1 (
goto :end
)
rem CELFが停止したか確認
:loop
rem カウンターを+1する
set /a count+=1
tasklist /v |findstr "surge.exe" |findstr "Curl コントロールパネル" > null
if %errorlevel% == 1 (
echo CELFは起動しています。%count%回目のループです。
) else (
goto :end
)
rem 「loop」ラベルに戻る
goto :loop
:end
echo END
exit /b 99
日本コンピュータシステム様
早速の回答ありがとうございます。
追加の質問になりますが、既に稼働している(作成済み)ロボットに終了を判定するためのアクションを追加することなく、終了を判定する方法はありますでしょうか。
例えば、コマンドやAPIを実行するとロボットの状態が取得できるなどの手段があれば教えていただけますでしょうか。
早速の回答ありがとうございます。
追加の質問になりますが、既に稼働している(作成済み)ロボットに終了を判定するためのアクションを追加することなく、終了を判定する方法はありますでしょうか。
例えば、コマンドやAPIを実行するとロボットの状態が取得できるなどの手段があれば教えていただけますでしょうか。
日本コンピュータシステム(CELFチーム)
パートナー
こんにちは。
終了判定方法についてですが、「rpa-yyyymmdd.log」はRPAのアクションごとにログが出力されるようですが、終了時の情報は出力されていないようですので、ロボットの「秒待機する」アクションで対応する方法は如何でしょうか。
以下はロボットの「秒待機する」アクションの出力結果(1秒)になりますが、例えば他のアクションと被らないよう、5秒に設定し終了の判定に利用できるようにする方法です。
■「秒待機する」アクション
2022-12-27 14:27:18.939000 [USER] [NCS05] wait 1 seconds
方法は他にもあると思いますが、ログにで確認するのではなく、ファイルの移動で確認する方法になります。
ロボットに「ファイルまたはフォルダを移動する」アクションを利用し、実行時に所定のファイルくを何処かに移動し、終了時に移動したファイルを元の場所に戻すことで実行判定が行なえると思います。
他にも色々方法はあるかと思いますが、参考になれば幸いです。
終了判定方法についてですが、「rpa-yyyymmdd.log」はRPAのアクションごとにログが出力されるようですが、終了時の情報は出力されていないようですので、ロボットの「秒待機する」アクションで対応する方法は如何でしょうか。
以下はロボットの「秒待機する」アクションの出力結果(1秒)になりますが、例えば他のアクションと被らないよう、5秒に設定し終了の判定に利用できるようにする方法です。
■「秒待機する」アクション
2022-12-27 14:27:18.939000 [USER] [NCS05] wait 1 seconds
方法は他にもあると思いますが、ログにで確認するのではなく、ファイルの移動で確認する方法になります。
ロボットに「ファイルまたはフォルダを移動する」アクションを利用し、実行時に所定のファイルくを何処かに移動し、終了時に移動したファイルを元の場所に戻すことで実行判定が行なえると思います。
他にも色々方法はあるかと思いますが、参考になれば幸いです。