Wednesday 7 February 2018

C # 프로세스 waitforexit 반환 코드


C # 프로세스 waitforexit 반환 코드
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
프로세스가 오류를 반환했는지 확인 | 기음#
& amp; 다음과 같이 프로세스를 시작하십시오.
현재 두 가지 가능성이 있습니다 : 출력 또는 오류.
오류가 발생하면 오류가 발생했는지 알 수있는 Process 클래스의 속성이 있습니까?
표준 출력 방향을 바꿀 때 MSDN에서 경고 한 표준 오류를 리디렉션하고 싶지 않습니다. 또한 나는 사용하고 싶지 않다 : BeginOutputReadLine ();
대안이 있습니까?
프로세스를 시작하고 프로세스가 종료 될 때까지 기다려야하는 서비스가 있으며 다음과 같은 것을 사용합니다.
여기서 CommandErrorCode는 다음과 같습니다.
Btw, 나는 표준 출력과 표준 오류 모두를 리디렉션하고 BeginXXXReadLine 및 XXXDataReceived 핸들러를 사용하며 아무런 문제가 없지만 사용하는 프로세스는 잘 알려져 있고 잘 정의되어 있으며 올바르게 동작합니다.

C # 프로세스 waitforexit 반환 코드
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
C #을 사용하여 CMD에서 Exitcode 얻기
나는 다음 코드를 사용하여 PATH, EXECUTABLE NAME 및 ARGUMENTS를 배치 파일에 작성하고 C #을 사용하여 CMD를 통해 실행합니다. 문제는 배치 파일을 실행 한 후 애플리케이션 dosent가 시작되는 경우입니다. 그리고 C # 코드는 나에게 예외 나 알림을줍니다.
어떤 명령이 제대로 실행되었는지 확인하기 위해 CMD에서 Exitcode를 얻고 싶습니다. 종료 코드는 어떻게 결정합니까?
Batchfile 내부 스크립트 : [Notepads. exe가 오류를 얻는 데는 잘못되었습니다.]
""% ERRORLEVEL % "=="1 "종료 / B 1"
일괄 처리 스크립트 레이어를 사용하고 있기 때문에 약간의 컨트롤을 잃어 버리기 때문에 나중에 실행하는 배치 파일을 만드는 대신 프로세스를 직접 실행하는 것이 훨씬 쉽습니다.
이 코드를 대신 사용하십시오.
나는 많은 프로젝트에서 그것을 사용하고 그것은 매력처럼 작동합니다.
배치 스크립트 경로를 사용해야하는 경우 배치 스크립트가 exitcode를 올바르게 설정했는지 확인하십시오.
Process. ExitCode 속성이 원하는 것을 제공하지 않습니까? 분명히 배치 파일 자체가 올바른 종료 코드로 종료되고 실행중인 응용 프로그램을 미러링해야합니다.
그런데 using 문을 사용하여 예외가 발생하더라도 관련 스트림이 모두 닫혀 있는지 확인해야합니다. 동기 IO 대신 애플리케이션의 데이터에 비동기로 반응하는 방법을 제안합니다. 동기 입출력을 고수한다면 표준 오류에서 다른 스레드가 읽어야합니다. 그렇지 않으면 프로세스가 많은 양의 데이터를 표준 오류에 쓰면 버퍼를 지우는 것을 기다리는 블록이 생깁니다.

C # 프로세스 waitforexit 반환 코드
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
WaitForExit을 처리하고 반환 값 async를 얻습니다.
프로세스를 시작하고 종료를 기다리고 exitcode를 반환하는 함수가 있습니다.
이것은 잘 작동하고 있습니다. 그러나 Exit를 기다리기 때문에, Window Form을 차단합니다. (나는 움직이는 콘텐트 인 Marquee Progress Bar를 가지고 있으며, 이제는 obivously stop합니다). 종료 코드 비동기를 반환하는 방법을 알 수 없으며 이해할 수있는 가능한 해결책을 찾지 못했습니다.
다음 코드를 사용할 수 있습니다.
그러나 로그인 함수는 프로세스 시작 후 직접 종료되므로 정수 값을 반환 할 수 없습니다. 함수 exit_exited에서 종료 코드를 얻습니다.
Process. Exit 이벤트에 등록하고 거기서 종료 코드를 처리 할 수 ​​있습니다.
그런 다음 OnMyProcessExited 메서드에서 종료 상태를 반환합니다.

C # 프로세스 waitforexit 반환 코드
우리가 C #을 사용하여 유닛 테스트 환경을 구동하고 showstopper를 때릴 수 있는지 확인하려고합니다 : 호출 된 프로세스의 Process. ExitCode가 손실 될 것 같습니다 (예상 1 대신 0이됩니다).
다음은 샘플 프로그램입니다.
다음은 샘플 출력입니다.
& quot; 예상치 못한 rc : 0 & quot;이 없어야합니다. 분명히.
왜 이런 일이 일어나는 걸까요? 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 이것은 Win7 / 64에 있습니다.
그건 그렇고, 나는 비슷한 질문을 제기했지만 VC에 관해서는 & # 43; VC & # 43; & # 43; 법정.
aam_에 의해 편집 2012 년 11 월 16 일 금요일 오전 4:54 서명을 제거했습니다.
모든 답장.
& quot; 조기 최적화는 모든 악의 뿌리입니다. & quot; - 크 누스.
피터, 고맙습니다. 샘플은 오히려 인위적인 예제이지만, 하위 프로세스의 종료 코드가 손실되었을 때 직면했던 실제 문제입니다.
그렇다고 프로세스 스케줄을 압도한다는 것은 무엇을 의미합니까? :-) 그것은 OS의 초석이되기로되어 있지 않습니까?
& quot; 조기 최적화는 모든 악의 뿌리입니다. & quot; - 크 누스.
확실하지는 않지만 프로세스가 & quot; pss. Add (Process. Start (psi)); & quot; 목록에 추가 된 동일한 순서로 하나씩 완료해야하는 것은 아닙니다. 가장 좋은 방법은 프로세스 ID를 디버그하고 볼 수 있고 두 번째 루프에서 ID를 확인하여 두 경우 모두 순서가 동일한 지 여부를 확인할 수 있습니다.
또한 당신은 디버그 할 수 있고, 모든 프로세스의 종료 코드는 동일하거나 또는 동일하지 않습니다.
확실하지는 않지만 프로세스가 & quot; pss. Add (Process. Start (psi)); & quot; 목록에 추가 된 동일한 순서로 하나씩 완료해야하는 것은 아닙니다. 가장 좋은 방법은 프로세스 ID를 디버그하고 볼 수 있고 두 번째 루프에서 ID를 확인하여 두 경우 모두 순서가 동일한 지 여부를 확인할 수 있습니다.
Joon, 응답 해 주셔서 감사합니다. 이 테스트의 목적을 위해 나는 프로세스가 생성 된 순서와 동일한 순서로 기다리고 있습니다. 그것들은 다른 순서로 끝날 수도 있지만, 나는 기다리는 것을 연재 중입니다. 예를 들어 첫 번째 프로세스가 마지막으로 끝나더라도 첫 번째 프로세스가 나머지 프로세스로 이동하기 전에 기다립니다. 출구 코드에 영향을주지 않아야한다고 생각하지 않습니다.
또한 당신은 디버그 할 수 있고, 모든 프로세스의 종료 코드는 동일하거나 또는 동일하지 않습니다.
모든 샘플 프로세스에서 위의 샘플 출력은 코드 0을 사용하여 종료 된 코드 1을 제외하고 종료합니다.
msdn 링크를 보면 프로세스 종료 코드가 모든 유사한 유형의 프로세스에서 동일하지 않은 것으로 보입니다. 그 값은 다를 수 있습니다. 따라서, 그들은 "HasExited"를 체크 할 것을 권고한다. 대신 속성.
개발자는 일반적으로 ExitCode 값이 0 인 성공적인 종료를 나타내고, 호출 메소드가 비정상 프로세스 종료의 원인을 식별하는 데 사용할 수있는 0이 아닌 값으로 오류를 지정합니다. 이 지침을 따를 필요는 없지만 관례입니다.
프로세스가 종료되기 전에 ExitCode를 가져 오려고하면 예외가 throw됩니다. 먼저 해당 프로세스가 종료되었는지 확인하기 위해 HasExited 속성을 검사하십시오. "
msdn 링크를 보면 프로세스 종료 코드가 모든 유사한 유형의 프로세스에서 동일하지 않은 것으로 보입니다. 그 값은 다를 수 있습니다. 따라서, 그들은 "HasExited"를 체크 할 것을 권고한다. 대신 속성.
고마워, 제안, Joon. WaitForExit () 후에 HasExited 속성에 대한 검사를 추가하고 ExitCode가 예상 1 대신 0이더라도 항상 true입니다.
유용 할 수도있는 몇 가지 추가 정보. 나는 VS2008가있는 XP 상자에서 이것을 실행했고 다음을 얻었다.
작은 매개 변수 (20, 10 및 10, 20)는 오류가 없습니다. 모두 완료되었습니다.
매개 변수 100, 20에 오류 코드 -1066598274가있는 19 개의 종료가 있습니다. 0으로 종료하지 않음. 다중 실행은 오류가 발생할 때 (즉, 오류 사이의 점 수) 차이를 나타내지 만 5 번의 테스트에서는 항상 19 점입니다.
많은 수의 프로세스가 어떻게 든 OS 프로세스 처리를 압도하는 것으로 보입니다.
감사 데이비드 R.
객체 지향 코드의 큰 점은 크고 복잡한 문제처럼 작고 단순한 문제를 만들 수 있다는 것입니다.
객체 지향 프로그래밍은 스파게티 코드를 작성할 수있는 지속 가능한 방법을 제공합니다. - 폴 그래함.
모든 프로그램은 결국 로코코가되고 결국에는 잔해가됩니다. - 앨런 펄리스.
유일하게 유효한 코드 품질 측정치 : WTF / 분.
Bob Shen이 (가) 답변으로 표시 Microsoft 부기 직원, 중재자 2012 년 12 월 4 일 화요일 오전 9:06 aam_ 님의 답변이 표시되지 않았습니다. 2012 년 12 월 4 일 화요일 12:53 PM.
여러 환경에서 시도했지만이 문제를 재현 할 수 없습니다. 더 많은 조사가 필요하고 흔적이있을 수 있습니다. 지원 관점에서 이것은 포럼에서 여기서 할 수있는 것 이상입니다. 여기 또는 직접 답변을 결정할 수없는 경우 저희와 함께 지원 사례를 열어보십시오. 이 링크를 방문하여 요구 사항을보다 잘 충족시킬 수있는 다양한 지원 옵션을 확인하십시오 : support. microsoft / default. aspx? id=fh;en-us;offerprophone.
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.

No comments:

Post a Comment