일련의 명령을 프로그래밍 방식으로 실행하려고 시도하고 있으며 오류 코드를 읽고 이러한 코드가 성공 또는 실패를 나타내면 이에 따라 대응할 수 있는지 검색합니다.어떤 프로그램이 오류 코드를 반환했는지 어떻게 알 수 있습니까?
현재 내 명령은 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
내가 직면하고있는 문제는 항상 Robocopy 또는 다른 실행 파일 또는 배치 파일이든 항상 PSExec을 사용하여 파일 이름이 항상 psexec이지만 인수가 항상 다릅니다. . 내 질문은 어떤 프로그램이 코드를 반환했는지 어떻게 결정할 수 있습니까? PSExec와 다른 프로그램 모두 실행 중입니다.하지만 robocopy가 실행되기 전에도 PSExec은 오류 코드 5가 거부되어 실패 할 수 있습니다. 어떤 코드가 어떤 프로그램에서 나왔는지 어떻게 알 수 있습니까? 아니면 추측 만 남았습니까? – Ben
아. 알았다. 안타깝게도'PsExec'는 애플리케이션의 성공 여부에 관계없이 애플리케이션을 성공적으로 시작할 수있는 한 항상 성공할 것입니다. 따라서 PsExec 실행시 발생하는 오류 코드는 항상 PsExec에서 발생합니다. 해당 코드가 성공을 나타낼 경우 실제 응용 프로그램의 코드를 테스트합니다. 하나의 지저분한 방법은 'PsExec'을 사용하여 스크립트를 실행하는 것입니다. 그러면 PsExec이 애플리케이션을 실행하고 종료 코드를 가져 와서 코드를 파일에 씁니다. 그런 다음 파일에서 코드를 읽을 수 있습니다. – 341008
감사합니다. 그것은 내가 두려워하는 것입니다 :/나는 결과에 대한 통계 분석을하고 robocopy 명령의 수를 저장하고 실패한 명령의 수를 0-8 범위로 비교하려고합니다. 실패 횟수가 robocopy 명령 수와 같거나 초과하면 PSExec/windows에서 문제가 발생하고 사용자에게 경고 할 수 있습니다. 그렇지 않으면 통계를 표시하고 계획에 따라 일이 진행되거나 개인적으로 조사해야하는 경우 사용자가 결정하도록 할 수 있습니다. – Ben