toran
1
バッチを用いた繰り返しの自動化を行っております。
バッチウインドウは普段「CloseWindow」でclose処理を行っており、
失敗したときのみ「KillProcess」で「cmd」プロセスの強制終了を行っていますが、
特定の状況下で両方の処理が失敗することがあります。
具体的な流れは以下のとおりです。
①バッチを起動する
②バッチ処理が終了したor指定した待機時間を超えたらバッチウインドウを閉じる
③バッチウインドウのclose処理に失敗した場合のみ、cmdプロセスを強制終了する
④次データへ(①に戻る)
事象としては、②で何らかの原因でcmdのセレクタが取れなくなる⇒③でkillprocessしようとするもバッチ画面がcloseされないといった状況です。
検証していたらcmdウインドウの起動中にウインドウ内部をクリック等でアクティブにしてしまうと発生してしまう気がします。
killprocessであればセレクタの状態に依存せずcmd画面をcloseできると思っていたのですが、何故このような事象が発生するのか
もしご存知の方がいらっしゃいましたらご教授お願いします。
Anil_G
(Anil Gorthi)
2
@toran
Ideally that should not be the case
Kill process does not depend on it
And also may I know why not use invoke power shell activity to run the cmd lines and using ui interactions for the same?
Cheers
Yoichi
(Yoichi)
3
こんにちは
現在batの起動はどのようにしていますでしょうか?
Processクラス、ProcesssStartInfoクラスを用いて、当該プロセスをインスタンスとしてコントロールした方が良いと思います。
下記サンプル確認いただけますでしょうか?バッチを起動し、10秒後にKillしています。
Sample20230615-4L.zip (4.0 KB)
1 Like
toran
4
ありがとうございます。
現在は「StartProcess」アクティビティを使用してバッチを起動しています。
あと少し環境が特殊でして、バッチは同ディレクトリ内にあるライセンスファイルを認識して動作するのですが
教えていただいた方法ですと、ライセンスファイルを認識せずにエラーとなってしまいます。
※「StartProcess」だと作業フォルダの設定があるためか認識ができているみたいです
Yoichi
(Yoichi)
5
StartProcessInfo.WorkingDirectoryをセットしてみてください。
例
psi.WorkingDirectory = "c:\temp"
toran
6
できました!!ありがとうございます!!
後学のためにお聞きしたいのですが、アクティビティの「StartProcess」と
今回のProcessクラスでは何か違いはあるのでしょうか?
Yoichi
(Yoichi)
7
こんにちは
アクティビティ内部は非公開なので推測になりますが
おそらくStartProcessアクティビティの内部でもProcessクラスやStartProcessInfoクラスは
使用されていると思います。ただすべての設定やプロパティをアクティビティのプロパティとすると
冗長になりすぎるため、必要なものに絞っているかと思います。
そのため、単純なプロセス起動でしたらStartProcessアクティビティで十分かと思いますが、
少し手の込んだことをしたいときはProcessクラスやStartProcessInfoクラスを使った方が
良いと思います。
1 Like
toran
8
なるほど、勉強になりました。
「InvokeMethod」でプロセスを終了すればセレクタにも左右されないので
どの環境でも使用することができそうです。
また何かありましたらよろしくお願いいたします。
1 Like
system
(system)
Closed
9
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.