私は、C# のバックグラウンド ワーカーに関する強力な知識を必要とする、非常に奇妙な問題を抱えています。
コマンド ライン プログラムを実行し、その ERRORLEVEL を確認したいと考えています。
cmd.exe /c echo Launching the command && COMMAND_TO_RUN & echo Connexion statut : && echo %ERRORLEVEL% && if %ERRORLEVEL% NEQ 0 (echo FAILURE) ELSE (echo SUCCESS))
コマンドが失敗すると、ERRORLEVEL は値 -1 を取得します。
これは、cmd.exe でこの行を使用すると機能します。
しかし、ここに問題があります。
バックグラウンド ワーカーを使用してこの行を実行すると、COMMAND_TO_RUN が失敗しても ERRORLEVEL の値は 0 になります。
これが私のバックグラウンドワーカーコードです:
string[] args = { "/c echo Launching the command && COMMAND_TO_RUN & echo Connexion statut : && echo %ERRORLEVEL% && if %ERRORLEVEL% NEQ 0 (echo FAILURE) ELSE (echo SUCCESS))};
backgroundWorker1.RunWorkerAsync(args);
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string[] args = e.Argument as string[];
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = args[0];
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardInput = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = false;
process.Start();
System.IO.StreamReader sOut = process.StandardOutput;
string tempOut;
while (!sOut.EndOfStream)
{
// using the report progress userstate allow me to catch
// the program output in runtime
tempOut = sOut.ReadLine();
backgroundWorker1.ReportProgress(1, tempOut);
}
process.Close();
}
バックグラウンドワーカーを使用すると、特定の値の ERRORLEVEL が発生しますか?
前もって感謝します