コードに、バッチ ファイルを呼び出して特定の引数を指定するセクションがあります。このバッチ ファイルは、別のバッチ ファイルなどを呼び出します。プロセス全体が完了するまでに約 45 分かかります。また、残りのコード (バッチ ファイルの後のクリーンアップなど) を続行する前に、バッチ ファイルが終了するのを待つ必要があります。
私の問題は、いくつかの異なることを試しましたが、バッチファイルの実行を完了することも、出力をログファイルに書き込むこともできないことです。
バッチファイルの実行を完了するために行ったことは次のとおりです。
Process process = new Process();
process.StartInfo.WorkingDirectory = Path.GetDirectoryName(filename);
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = false;
process.StartInfo.FileName = filename;
process.Start();
process.WaitForExit();
ロギングを有効にするために、かなりの数のことを試しました。これは最新の試みです。
Process process = new Process();
process.StartInfo.WorkingDirectory = Path.GetDirectoryName(filename);
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = filename;
process.Start();
StreamReader sr = process.StandardOutput;
StreamWriter sw = new StreamWriter(exelocation + @"Logs\" + version + "\\" + outputname + ".txt");
while (!process.HasExited)
{
sw.Write(sr.ReadToEnd());
}
このコードは基本的に、最初のバッチ ファイルの 1 つの些細な部分になり、そこで停止します。バッチ ファイルの実行時間は 1 分未満です。なぜこれが起こっているのかわかりません。標準出力がリダイレクトされずにウィンドウが作成された場合は完全に実行されますが、ウィンドウが非表示で標準出力がリダイレクトされた場合は何もしませんか?