他のインスタンスを起動するプログラムがあります。各インスタンスは、標準出力ストリームを異なるファイルにリダイレクトします。次の一連のイベントで問題があります。
- コマンドを含むBATファイルが実行されます
my_program.exe > output_launcher.txt - my_program.exeは、コマンドを使用して自分自身のインスタンスをさらに起動します。
my_program.exe > output_1.txtそしてmy_program.exe > output_2.txt - 元のインスタンス(
my_program.exe > output_launcher.txt2つのインスタンスが起動している間に終了します。my_program.exe > output_1.txtそしてmy_program.exe > output_2.txt)実行を続けます。 - #1の同じBATファイルが再度実行されます。
- の新しいインスタンス
my_program.exe > output_launcher.txt「ファイルが別のプロセスによって使用されているため、ファイルにアクセスできません」というエラーで失敗します。
#1のBATファイルが出力をリダイレクトしない場合はエラーにはなりません。また、BATファイルを2回実行する前に2つの起動済みインスタンスが終了してもエラーにはなりません。
だから、私はすべてのサブプロセスが終了するまでCMD.EXEがoutput_launcher.txtファイルへの排他的な権利を保持していると思います。
まず第一に、それは良い仮定ですか?
各サブプロセスが独自のファイルにリダイレクトされているため、元のインスタンスが#3に存在する場合、CMD.EXEはoutput_launcher.txtに対する権利を放棄します。
標準出力をリダイレクトするとき、これは可能ですか?私が考えることができる最善の方法は、標準出力をリダイレクトするのではなく、実際にログファイルの場所をコマンドライン引数として受け取り、私のプログラムから直接ファイルに書き込むことです。ただし、これにはもっと多くの作業が必要になるため、可能であればその方法は避けたいと思います。
ありがとうございます。
編集:最初のインスタンスが追加のインスタンスを起動するために使用する実際のコマンドラインは、 start cmd /C "call my_program.exe > output_1.txt"。それからそのコマンドを "system()"関数に渡します(my_program.exeはMSDN Cで書かれています)。
追加のインスタンスを別の方法で起動できる可能性があります。