プログラムで一連のコマンドを実行し、エラーコードを読み取り、これらのコードが成功または失敗を示しているかどうかを検出して、それに応じて対応できるようにしようとしています。
現在、私のコマンドはpsexecを使用しており、psexecはrobocopyを起動します。プログラムが成功した場合、ほとんどのコマンドはエラーコード0を返しますが、robocopyは、操作が成功した場合でも0〜8の範囲の値を返すという点で奇妙であるため、ロジックを追加しています。 robocopyがエラーコードを返すときに注意するエラー検出。それ以外の場合は失敗を示唆します。
問題は、この同じコマンドセットで、PSExecを使用して他のさまざまな実行可能ファイルやバッチファイルを起動しているため、robocopyがこれらのエラーコードを返すのはいつか、またはPSExecであるかどうかを知ることができるエラー検出ソリューションが必要なことです。通常、robocopyのエラーコード5は問題ありませんが、PSExecのエラーコード5は、アクセスが拒否されたことを示しています。
だから私の質問は、どのプログラムがエラーコードを返したかをどうやって知るのですか?私はc#.NET 4.0を使用しており、Processクラスを使用してこれらのプログラムをプログラムで起動しています。プログラム名をpsexecとして設定し、引数にはrobocopyまたは他のプログラムが含まれています。次に、実行して終了を待ち、エラーコードを保存してから、解析を試みます。
皆さんは何を提案しますか?
コードスニペットは次のとおりです。
foreach (var command in commands)
{
// TODO: Add exception handling
string processName = command.Split(delimiters).ToList().ElementAt(0); // split up command into pieces, select first "token" as the process name
string commandArguments = command.Replace(processName + " ", ""); // remove the process name and following whitespace from the command itself, storing it in a new variable
Process commandProcess = new Process(); // declare a new process to be used
commandProcess.StartInfo.FileName = processName; // add file start info for filename to process
commandProcess.StartInfo.Arguments = commandArguments; // add file start info for arguments to process
commandProcess.StartInfo.UseShellExecute = false; // skip permissions request
commandProcess.Start(); // start process according to command's data
commandProcess.WaitForExit(); // wait for the process to exit before continuing
bool commandSuccessful = ParseCommandErrorCode(commandProcess, commandProcess.ExitCode); // grab error code
if (!commandSuccessful)
{
// ERROR! abort operation and inform the user of the last completed operation, and how many commands have not been run
} // end if
Console.WriteLine("Error code: {0}", commandProcess.ExitCode); // print error code
commandProcess.Close(); // close process
} // end foreach