프로세스 대기 포착 사례
Process. waitforexit 예
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
Process. WaitForExit를 사용하는 방법.
나는 '때때로'VB에서 작동하는 3 부 애플리케이션을 호출하고있다. (자체 호스팅 WCF이다.) 하지만 때로는 타사 앱이 영원히 멈춰 버리기 때문에 90 초 타이머를 추가했습니다. 문제는, 시간이 초과되었는지 어떻게 알 수 있습니까?
코드는 다음과 같습니다.
제가하고 싶은 것은 이것과 같습니다.
메서드 반환 값 확인 - msdn. microsoft / en - us / library /ty0d8k56.aspx - 호출 시간이 초과되면 False를 반환합니다.
과거에는 WaitForExit을 사용할 때 앱이 멈추는 문제가있었습니다.
Process. waitforexit 예
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
프로세스가 끝날 때까지 기다리십시오.
나는 그 응용이있다.
다른 응용 프로그램 'ABC'를 시작하십시오. 해당 신청서가 끝날 때까지 기다려서 (프로세스가 종료 됨) 내 실행을 계속 진행하고 싶습니다. 내가 어떻게 해?
동시에 실행되는 'ABC'응용 프로그램의 인스턴스가 여러 개있을 수 있습니다.
나는 당신이 단지 이것을 원한다고 생각한다.
메서드에 대한 MSDN 페이지를 참조하십시오. 또한 타임 아웃을 지정할 수있는 오버로드가 있으므로 잠재적으로 영원히 대기하지 않습니다.
Process. WaitForExit을 사용 하시겠습니까? 또는 차단하지 않으려면 Process. Exited 이벤트에 가입하십시오. 그게 당신이 원하는대로하지 않는다면, 우리에게 당신의 요구 사항에 대한 더 많은 정보를주십시오.
내 신청서에서 다음을 수행합니다.
유용 할 수있는 몇 가지 추가 기능이 있습니다.
exit를 기다리거나 HasExited 속성을 catch하고 UI를 업데이트하여 사용자에게 "정보 제공"(기대 관리)을 유지할 수 있습니다.
Process. waitforexit 예
이 질문은 좀 이상하게 보일지 모르겠지만 프로세스를 통해 VS2005를 실행하고 특정 명령을 실행하고 waitforexit ()를 시도하고 있습니다. 입력과 출력이 성공적으로 리디렉션되고 있지만 지금은 Window Error Reporting Window / Message가 표시됩니다. 문제는 내가 원격 작업을하는 것이므로 프로세스 실행 중에이 메시지 / 창이 발생하면 다른 (원격) 시스템에 로그인하고 창을 닫지 않으면 중단됩니다.
프로그래밍 방식으로이 창을 종료하거나 메시지 / 창을 사용하지 않도록 설정할 수있는 방법이 있습니까? 나는 조용한 실행 (아직 그렇게하는 방법을 찾을 수있다)에서 VS를 실행하는 생각. 나는 또한 이것이 일어나지 않을 때와 비교할 때 어떤 것이 있는지를 알아 내려고 시도했다.
글쎄, SendMessage 함께 FindWindow 및 FindWindowEx 사용하려고했지만 올바른 창 핸들을 찾을 수 없습니다. 그러나 Windows 오류보고 Msssage Box가 나타나기 때문에 자체 프로세스인지 확인했습니다. 프로세스는 dwwin. exe (Dr. Watson Win)이며 현재 문제를 해결할 수 있도록해야했습니다. 아래에있는 현재 코드 블록을 이전에 WaitForExit () 문으로 대체하십시오.
proc. WaitForExit (60000); // 1 분.
Process [] ProcArray = Process. GetProcessesByName ( "dwwin");
foreach (ProcArray의 Process ProcessFound 처리)
또한 Process. MainWindowTitle ()을 가져올 수 있는지 확인했지만 "&"로 설정되었습니다. 그래서 이것은 해킹이며, 나는 그것을 사용하는 것을 정말로 좋아하지 않지만, 현재의 실행을 위해 작동합니다.
모든 답장.
당신이 받고있는 오류에 대해 구체적으로 말씀해 주시겠습니까?
입력 및 출력을 리디렉션 할 때만 발생합니까?
& quot; cmd & quot; 콘솔을 실행하고 있습니까? ?
그렇다면 종료를 입력해야합니다.
// 타임 아웃주기 전에 처리가 종료되었습니다.
// 오류 메시지를 출력 하시겠습니까?
해보고 싶지만 해킹이 너무 많습니다. 나는 다른 시간 (30 초에서 25 분)이 걸리는 명령이 너무 많아서 성능을 저하시키지 않고 실시간으로 설정을 할 수 없습니다. 이 함수는 지난 6 개월 동안 여러 명령에 대해 올바르게 작동했으며 이제는 나에게 ***로 결정합니다. 나는 아무 문제없이 다른 컴퓨터에서 그것을 시도했다. 나는 새로운 WINDOW가 원격 서버에 생성되기 때문에 출력 / 오류 리디렉션이 아니라는 것을 알고 있습니다. 창을 닫으면 프로세스가 예상대로 종료되고 올바른 출력이 사용자 측에 표시됩니다.
도움을 주셔서 감사합니다. 하지만이 문제로 인해 정말로 좌절하고 있습니다.
메시지의 세부 사항을 알지 못하면서 문제를 추측합니다.
3.5 베타 또는 Visual Studio 2008 베타를 설치 했습니까?
Process를 사용하여 Process. Start ( "file. exe") 프로그램을 시작하거나 ProcessStartInfo를 어떻게 사용하고 있습니까?
아니요, 2003 년과 2005 년을 설치했습니다.
proc = new Process ();
procSI = 새로운 ProcessStartInfo ();
그런 다음 StandardError 및 StandardOutput에 대한 새 스레드를 설정합니다.
나는 내 명령을 적는다.
if (표준 출력 방향 변경)
st의 시작 스레드. 아웃.
(표준 오류 방향 재 지정)
st의 시작 스레드. 오류.
Proc. WaitForExit (); & lt; -------- 여기는 일반 Windows 오류보고 창이 발생하는 곳입니다.
나는 팝업 창에서 내가 할 수있는 것을 번역했다.
문제가 발생하지 않았으므로 Microsoft Visual Studio 2005를 종료합니다. 불필요한 것으로 고쳐서 사용하지 않았습니다.
문제가 발생하기 때문에 Microsoft Visual Studio 2005가 종료됩니다. 불편을 끼쳐 드려 죄송합니다.
시간 내 주셔서 다시 한번 감사드립니다.
왜 이런 짓을하는? 이 스트림을 소유하지 않으므로 스트림을 닫지 않아야합니다.
이것은 오타입니까? Proc가 아닌 & quot; proc & quot;라는 변수에 대해 이야기하기 전에. 당신이 & quot; proc & quot;와 다른 참조에서 메소드를 호출하려고하기 때문에 이것은 단순히 null 참조입니까?
리디렉션 할 때 응용 프로그램이 종료 될 때까지 sIn 객체를 닫지 않으려 고합니다. 응용 프로그램 중 하나를 닫은 후에 응용 프로그램이 표준 출력에 쓰거나 표준 입력에서 읽으면 예외가 발생할 수 있습니다.
해당 오류 메시지의 스택 추적을 가지고 있습니까?
리디렉션 할 때 응용 프로그램이 종료 될 때까지 sIn 객체를 닫지 않으려 고합니다.
하나는 그 물줄기를 전혀 닫아서는 안됩니다. Process 객체는 그것들을 소유하고 있으며, 그 자체는 이후 정리를 책임지는 객체입니다. 하나는 Process 객체로 끝난 후에 Process. Dispose ()를 호출해야한다.
나는 프로세스 객체를 생성하기 전에 StreamWriter를 생성했다. proc. Start () 명령 다음에 입력을 리디렉션하므로 어떻게 소유하지 않을까요? 그럼에도 불구하고 WaitForExit 호출 이후 sIn. Close ()를 변경하여 변경 사항을 적용하는지 확인할 수 있습니다.
Proc는 유형이었고 proc이어야했습니다.
다시 말하지만 오류 메시지가 아니므로 스택 추적이 없습니다. 내 StandardError 리디렉션은 비어 있으며 표준 OUtput 리디렉션에는 예상 한 내용이 포함되어 있지만 오류가 발생하지 않았습니다. 이것이 Windows 오류보고 창을 닫은 후에도 모든 것이 작동하는 이유입니다.
WaitForExit () 줄 아래에 sIn. Close () 줄을 이동 한 후 어떻게 될지 게시 할 것입니다.
리디렉션 할 때 응용 프로그램이 종료 될 때까지 sIn 객체를 닫지 않으려 고합니다.
하나는 그 물줄기를 전혀 닫아서는 안됩니다. Process 객체는 그것들을 소유하고 있으며, 그 자체는 이후 정리를 책임지는 객체입니다. 하나는 Process 객체로 끝난 후에 Process. Dispose ()를 호출해야한다.
좋아, 나는 Process를하고있다. 마침내 코드의 블록을 닫아서 처리해야한다.
이전에 내가 작성한 내 "소유하지 않은"댓글. 나는 점심 도시락으로 돌아 왔고 그 과정이이 점심을 통제하고 있다는 사실을 놓쳤다.
Process. Close는 standardinput 및 standardoutput (및 standarderror) 스트림을 닫는 권장 방법입니다.
Dispose 메서드가 적어도 작업의 일부로 Close를 호출하지 않으면 surpised됩니다. Process가 IDisposable을 구현 (간접적으로 그것을 구현하는 Component를 통해 구현) 한 후에 Dispose를 호출하고 적절한 정리를하도록해야한다는 사실을 사용하는 것이 좋습니다. Process. Close 대신 Process. Dispose를 호출하는 것을 권장하지 않습니다.
Process. Close는 standardinput 및 standardoutput (및 standarderror) 스트림을 닫는 권장 방법입니다.
Dispose 메서드가 적어도 작업의 일부로 Close를 호출하지 않으면 surpised됩니다. Process가 IDisposable을 구현 (간접적으로 그것을 구현하는 Component를 통해 구현) 한 후에 Dispose를 호출하고 적절한 정리를하도록해야한다는 사실을 사용하는 것이 좋습니다. Process. Close 대신 Process. Dispose를 호출하는 것을 권장하지 않습니다.
내가 아는 한, 이들은 기능적으로 동일합니다 :
using (SomethingDisposable myObject =.)를 사용합니다.
// 여기서 myObject를 사용하십시오.
// 여기서 myObject를 사용하십시오.
if (myObject! = null) myObject. Dispose ();
따라서 첫 번째 권장 사항이 using 블록을 사용하는 경우 다음 단계는 Dispose를 호출하는 것입니다. Close가 아니라면, 말했듯이 객체를 다 처리했음을 알 수 있습니다.
IDisposable을 구현하는 무언가에 대해 Close 만 호출하면 개발자가 실수로 실수를 저 지르려고합니다. Dispose가 Close에 위임하는 것 이상의 추가 정리를 수행하는 경우 프로그래머는 Close를 호출하여 스스로 버그를 설정합니다.
닫기를 호출하는 경우가있을 수 있습니다. 단, 마지막 응답의 맨 아래에 표시된대로 개체를 완료하지 않은 경우에만 가능합니다. 그러나 그걸로 끝나면 Dispose에게 전화하십시오.
내가 아는 한, 이들은 기능적으로 동일합니다 :
using (SomethingDisposable myObject =.)를 사용합니다.
// 여기서 myObject를 사용하십시오.
// 여기서 myObject를 사용하십시오.
if (myObject! = null) myObject. Dispose ();
따라서 첫 번째 권장 사항이 using 블록을 사용하는 경우 다음 단계는 Dispose를 호출하는 것입니다. Close가 아니라면, 말했듯이 객체를 다 처리했음을 알 수 있습니다.
IDisposable을 구현하는 무언가에 대해 Close 만 호출하면 개발자가 실수로 실수를 저 지르려고합니다. Dispose가 Close에 위임하는 것 이상의 추가 정리를 수행하는 경우 프로그래머는 Close를 호출하여 스스로 버그를 설정합니다.
닫기를 호출하는 경우가있을 수 있습니다. 단, 마지막 응답의 맨 아래에 표시된대로 개체를 완료하지 않은 경우에만 가능합니다. 그러나 그걸로 끝나면 Dispose에게 전화하십시오.
DisposableClass obj = 새로운 DisposableClass ();
IDisposable disposable = obj를 IDisposable로;
if (일회용! = null)
그러나 그렇습니다, 그것은 사용하는 진술이 "기능적으로 동등한 것"입니다. 에; 하지만 "닫기"상태에서 Dispose를 명시 적으로 호출하는 것에 동의하지 않습니다. 메서드는 Dispose 호출로 범위 지정이 부족하기 때문에 첫 번째 선택 항목이어야합니다. 예를 들어 다음과 같습니다.
using (프로세스 프로세스 = 새 프로세스 ())
. 구문 오류입니다.
다음과 같은 동안 :
프로세스 프로세스 = 새 프로세스 ();
// "프로세스"를 보장 할 방법이 없습니다. 습관.
// 위의 다음에 액세스해야합니다.
런타임 오류 (ObjectDisposedException)입니다. Close를 사용하면 런타임 오류가 발생하지 않습니다.
프로세스 프로세스 = 새 프로세스 ();
런타임 오류에 대해 컴파일 타임 오류를 교환하는 것이 항상 좋습니다.
그래서, 나는 proc. WaitForExit () 호출 후에 브레이크 포인트를 설정하고 아직이 브레이크 포인트에 도달하지 않았다. 그래서 그것은 꽤 문제인 것처럼 보입니다.
그래서, 나는 proc. WaitForExit () 호출 후에 브레이크 포인트를 설정하고 아직이 브레이크 포인트에 도달하지 않았다. 그래서 그것은 꽤 문제인 것처럼 보입니다.
나는 서비스를 운영하고 있었지만 2 시간 동안 뛰었 기 때문에 중단했다. 내 클라이언트를 시작한 날부터 10 분 안에 성공할 수있는 중단 점이 없었기 때문에 중단했다. 나는 지금 sIn. Close () 줄의 주석 처리를 제거하고 서비스와 클라이언트를 다시 시작했으며 이전처럼 모든 것이 작동합니다. WaitForExit () 및 Windows 오류보고 메시지와 함께 완료된 후 중단 점을 맞출 수 있습니다 (이전과 같음).
따라서 필자는 예상대로 프로세스를 종료 할 수 있도록 입력 스트림을 닫아야했습니다. 다른 아이디어가 있습니까?
나는 당신이 무언가를 점검하고 싶다면 sIn. Close () 라인을 다시 사용할 수있다.
나는 서비스를 운영하고 있었지만 2 시간 동안 뛰었 기 때문에 중단했다. 내 클라이언트를 시작한 날부터 10 분 안에 성공할 수있는 중단 점이 없었기 때문에 중단했다. 나는 지금 sIn. Close () 줄의 주석 처리를 제거하고 서비스와 클라이언트를 다시 시작했으며 이전처럼 모든 것이 작동합니다. WaitForExit () 및 Windows 오류보고 메시지와 함께 완료된 후 중단 점을 맞출 수 있습니다 (이전과 같음).
따라서 필자는 예상대로 프로세스를 종료 할 수 있도록 입력 스트림을 닫아야했습니다. 다른 아이디어가 있습니까?
나는 당신이 무언가를 점검하고 싶다면 sIn. Close () 라인을 다시 사용할 수있다.
표준 입력과 표준 출력을 어떻게 사용하고 있습니까? ReadLine 메서드를 사용하고 있습니까?
피터, 내 요점은 :
IDisposable을 (직접 또는 간접적으로) 구현하는 객체에서 Dispose를 호출하지 않으면 버그를 묻는 것입니다. 나는 이것을 끝없이 논쟁하고 싶지 않다. 당신은 당신이하는 것처럼 계속 할 수 있고, 나는 내 것을 붙잡을 것이다. 우리가 서로의 코드를 유지할 필요가없는 한, 괜찮습니다.
그리고 그런데, "사용함" 블록이 당신을 보호하지 않습니다. 블록 밖의 변수를 선언하는 것을 멈추게 할 수는 없으므로 (블록을 끝내면 여전히 유효합니다) 블록에 변수가 남아있을 수 있습니다. 올바른 코드 작성에 부지런해야합니다. & quot; 사용 & quot; 성명서, 그건 한 가지 방법입니다. 하지만 try / finally 접근법을 사용하지 않으려면 변수를 범위에 남겨두기 만하면됩니다. Dispose () 어딘가에 있어야합니다.
나는 서비스를 운영하고 있었지만 2 시간 동안 뛰었 기 때문에 중단했다. 내 클라이언트를 시작한 날부터 10 분 안에 성공할 수있는 중단 점이 없었기 때문에 중단했다. 나는 지금 sIn. Close () 줄의 주석 처리를 제거하고 서비스와 클라이언트를 다시 시작했으며 이전처럼 모든 것이 작동합니다. WaitForExit () 및 Windows 오류보고 메시지와 함께 완료된 후 중단 점을 맞출 수 있습니다 (이전과 같음).
따라서 필자는 예상대로 프로세스를 종료 할 수 있도록 입력 스트림을 닫아야했습니다. 다른 아이디어가 있습니까?
나는 당신이 무언가를 점검하고 싶다면 sIn. Close () 라인을 다시 사용할 수있다.
표준 입력과 표준 출력을 어떻게 사용하고 있습니까? ReadLine 메서드를 사용하고 있습니까?
다시 말하지만, 이것은 던져지고있는 예외가 아니므로 예외 세부 사항을 볼 수 없습니다. 내 코드에서 catch 블록으로 직접 이동하지 않고 WaitForExit () 호출 후 직접 재개합니다. 내가받는 메시지는 Microsoft 제품이 예기치 않게 닫히고 MS가 충돌에 대한 정보를 원할 때 얻을 수있는 것과 동일한 것입니다. 다시 예외는 없습니다. 그러나 시스템 로그 중 하나에서 메시지를 받고 있습니다 (일본어 번역).
& quot; Devenv. exe 응용 프로그램 오류가 발생하면 8.0.50727.762 버전의 오류가 msvcr80.dll 모듈 버전 8.0.50727.762에서 발생했으며 0x00039001 주소에서 오류가 발생했습니다.
자세한 내용은 go. microsoft / fwlink / events. asp Helo 및 지원 센터를 참조하십시오. & quot;
다른 명령을 전달할 표준 입력을 리디렉션 할 때 StartInfo 양식을 원하는 방식으로 작동시키는 데 어려움을 겪고있었습니다. 프로세스가 종료 된 후에 출력 스트림과 오류 스트림을 리디렉션하여 해당 스트림에있는 내용을 확인합니다. 이렇게하면 우리가 끝내면 어느 한 스트림에서 내가 원하는 것을 확인할 수 있습니다. 또한 프로세스가 WaitForExit 호출을 통과 할 때까지 출력 또는 오류 리디렉션 스레드 중 하나를 허용하지 않습니다.
나는 완전히 난감한 처지입니다.
피터, 내 요점은 :
IDisposable을 (직접 또는 간접적으로) 구현하는 객체에서 Dispose를 호출하지 않으면 버그를 묻는 것입니다. 나는 이것을 끝없이 논쟁하고 싶지 않다. 당신은 당신이하는 것처럼 계속 할 수 있고, 나는 내 것을 붙잡을 것이다. 우리가 서로의 코드를 유지할 필요가없는 한, 괜찮습니다.
나는 동의하지 않는다. & quot; 버그 & quot;가 아닙니다. Dispose를 호출하지 않는다. 리소스는 즉시 해제되지 않지만 메모리가 필요할 경우 GC가이를 해제합니다 (Dispose 패턴이 제대로 구현되고 종료자가 존재한다고 가정). 사용중인 수업에서 & quot; 닫기 & quot; 메소드가 "Dispose"와 같은 것을하지 않는 경우, Close는 문서화되거나 클래스에 버그가 있어야합니다. IDisposable 및 "누수"기능을 도입 한 Close () 메서드를 구현하는 프레임 워크 클래스를 만난 적이 한번도 없었습니다. Dispose를 호출하지 않고 Close가 호출되었을 때. Dispose / Close에 대한 압도적 인 패턴은 Dispose가 Close를 호출 할뿐만 아니라 & quot; 폐기 된 & quot; flag (ObjectDisposedException을 슬로우하기 위해서 사용된다).
사실 이것은 Framework General Reference에서 자세히 설명되어 있습니다. "때때로 도메인 별 이름이 Dispose보다 적합합니다. 예를 들어, 파일 캡슐화는 메소드 이름 Close를 사용하려고 할 수 있습니다. 이 경우에는 Dispose를 개인적으로 구현하고 Dispose를 호출하는 공용 Close 메서드를 만듭니다. 다음 코드 예제는이 패턴을 보여줍니다. 닫기를 자신의 도메인에 맞는 메소드 이름으로 바꿀 수 있습니다. " 구현에서 정리 및 처분으로 관리되지 않는 리소스 정리
"파일 또는 데이터베이스 연결 객체와 같은 특정 클래스의 객체의 경우, Close 메소드는 객체의 소비자가 객체로 완료 될 때 수행되어야하는 논리 연산을보다 잘 나타냅니다." (잘 작성된 경우에는 둘 다 기능적으로 동등합니다. "), Close를 사용하면"better represent "로보다 명확합니다.
그리고 그런데, "사용함" 블록이 당신을 보호하지 않습니다. 블록 밖의 변수를 선언하는 것을 멈추게 할 수는 없으므로 (블록을 끝내면 여전히 유효합니다) 블록에 변수가 남아있을 수 있습니다. 올바른 코드 작성에 부지런해야합니다. & quot; 사용 & quot; 성명서, 그건 한 가지 방법입니다. 하지만 try / finally 접근법을 사용하지 않으려면 변수를 범위에 남겨두기 만하면됩니다. Dispose () 어딘가에 있어야합니다.
다시 말하지만, 이것은 던져지고있는 예외가 아니므로 예외 세부 사항을 볼 수 없습니다. 내 코드에서 catch 블록으로 직접 이동하지 않고 WaitForExit () 호출 후 직접 재개합니다. 내가받는 메시지는 Microsoft 제품이 예기치 않게 닫히고 MS가 충돌에 대한 정보를 원할 때 얻을 수있는 것과 동일한 것입니다. 다시 예외는 없습니다. 그러나 시스템 로그 중 하나에서 메시지를 받고 있습니다 (일본어 번역).
& quot; Devenv. exe 응용 프로그램 오류가 발생하면 8.0.50727.762 버전의 오류가 msvcr80.dll 모듈 버전 8.0.50727.762에서 발생했으며 0x00039001 주소에서 오류가 발생했습니다.
자세한 내용은 go. microsoft / fwlink / events. asp Helo 및 지원 센터를 참조하십시오. & quot;
귀하의 응용 프로그램이 메시지를 생성한다고 가정합니다 (이 경우 항상 예외와 스택 추적을 얻어야합니다). WaitForExit () 호출 후 다시 시작한다는 것이 명확하지 않습니다. 실행중인 응용 프로그램이 비정상적으로 종료되는 것처럼 들립니다. devenv. exe를 실행 중입니까? 다른 응용 프로그램이 비정상적으로 종료하는 것을 막으려면 응용 프로그램에서 무엇을 할 수 있는지 잘 모르겠습니다.
다른 명령을 전달할 표준 입력을 리디렉션 할 때 StartInfo 양식을 원하는 방식으로 작동시키는 데 어려움을 겪고있었습니다. 프로세스가 종료 된 후에 출력 스트림과 오류 스트림을 리디렉션하여 해당 스트림에있는 내용을 확인합니다. 이렇게하면 우리가 끝내면 어느 한 스트림에서 내가 원하는 것을 확인할 수 있습니다. 또한 프로세스가 WaitForExit 호출을 통과 할 때까지 출력 또는 오류 리디렉션 스레드 중 하나를 허용하지 않습니다.
나는 완전히 난감한 처지입니다.
그러므로 내가 계속 그 이유를 주장한 이유는 예외는 아니 었으며 내 코드는 나머지 부분을 예상대로 완료하는 데 여전히 효과적이었습니다.
그래서. 아직 종료하지 않은 경우 실행중인 프로세스에서 응용 프로그램 예외를 잡을 수있는 방법이 있습니까? 그것은 진짜 질문 일 것입니다.
글쎄, SendMessage 함께 FindWindow 및 FindWindowEx 사용하려고했지만 올바른 창 핸들을 찾을 수 없습니다. 그러나 Windows 오류보고 Msssage Box가 나타나기 때문에 자체 프로세스인지 확인했습니다. 프로세스는 dwwin. exe (Dr. Watson Win)이며 현재 문제를 해결할 수 있도록해야했습니다. 아래에있는 현재 코드 블록을 이전에 WaitForExit () 문으로 대체하십시오.
proc. WaitForExit (60000); // 1 분.
Process [] ProcArray = Process. GetProcessesByName ( "dwwin");
foreach (ProcArray의 Process ProcessFound 처리)
또한 Process. MainWindowTitle ()을 가져올 수 있는지 확인했지만 "&"로 설정되었습니다. 그래서 이것은 해킹이며, 나는 그것을 사용하는 것을 정말로 좋아하지 않지만, 현재의 실행을 위해 작동합니다.
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.
프로세스. WaitForExit 메소드 ()
API 참조 문서에는 새로운 홈이 있습니다. 새로운 경험을 보려면 docs. microsoft의 API 브라우저를 방문하십시오.
프로세스 구성 요소가 관련 프로세스가 종료 될 때까지 무기한 대기하도록 지시합니다.
어셈블리 : System (System. dll)
대기 설정에 액세스 할 수 없습니다.
프로세스 ID가 설정되지 않았으며 Id 속성을 확인할 수있는 핸들이 없습니다.
이 Process 개체와 연결된 프로세스가 없습니다.
원격 컴퓨터에서 실행중인 프로세스에 대해 WaitForExit () 호출하려고합니다. 이 방법은 로컬 컴퓨터에서 실행중인 프로세스에만 사용할 수 있습니다.
WaitForExit ()은 연결된 프로세스가 종료 될 때까지 현재 스레드를 대기시킵니다. 이 메소드는 다른 모든 메소드가 호출 된 후에 호출되어야합니다. 현재 스레드를 차단하지 않으려면 Exited 이벤트를 사용하십시오.
이 메서드는 Process 구성 요소에 프로세스 및 이벤트 처리기가 종료 될 때까지 무한한 시간 동안 대기하도록 지시합니다. 이로 인해 응용 프로그램이 응답을 중지 할 수 있습니다. 예를 들어 사용자 인터페이스가있는 프로세스에 대해 CloseMainWindow를 호출하면 프로세스가 메시지 루프를 입력하지 않도록 작성된 경우 연결된 프로세스를 종료하라는 운영 체제의 요청이 처리되지 않을 수 있습니다.
Framework 3.5 및 이전 버전에서는 WaitForExit () 오버로드가 무한대가 아닌 MaxValue 밀리 초 (약 24 일) 동안 대기했습니다. 또한 이전 버전에서는 MaxValue 전체 시간에 도달하면 이벤트 처리기가 종료 될 때까지 기다리지 않았습니다.
이 과부하는 경로 재 지정된 표준 출력에 대한 비동기 이벤트 처리를 포함하여 모든 처리가 완료되었는지 확인합니다. 표준 출력이 비동기 이벤트 처리기로 리디렉션되었을 때 WaitForExit (Int32) 오버로드를 호출 한 후에이 오버로드를 사용해야합니다.
연관된 프로세스가 종료 될 때 (즉 정상 또는 비정상 종료를 통해 운영 체제에 의해 종료 될 때) 시스템은 프로세스에 대한 관리 정보를 저장하고 WaitForExit ()을 호출 한 구성 요소로 돌아갑니다. 그런 다음 프로세스 구성 요소는 나가기 프로세스에 대한 핸들을 사용하여 ExitTime을 포함하는 정보에 액세스 할 수 있습니다.
연결된 프로세스가 종료되었으므로 구성 요소의 Handle 속성은 더 이상 기존 프로세스 리소스를 가리 키지 않습니다. 대신 핸들은 프로세스 자원에 대한 운영 체제의 정보에 액세스하는 데에만 사용할 수 있습니다. 시스템은 프로세스 구성 요소가 릴리스하지 않은 종료 프로세스에 대한 핸들을 알고 있으므로 프로세스 구성 요소가 리소스를 특별히 해제 할 때까지 ExitTime 및 핸들 정보를 메모리에 유지합니다. 이러한 이유로, Process 인스턴스에 대해 Start를 호출 할 때마다 연관된 프로세스가 종료되고 더 이상 관리 정보가 필요 없으면 Close를 호출하십시오. 닫기는 종료 된 프로세스에 할당 된 메모리를 해제합니다.
StandardError 속성 참조 페이지의 설명 섹션을 참조하십시오.
즉각적인 호출자에 대한 완전한 신뢰. 이 멤버는 부분적으로 신뢰할 수있는 코드에서 사용할 수 없습니다.
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
프로세스가 끝날 때까지 기다리십시오.
나는 그 응용이있다.
다른 응용 프로그램 'ABC'를 시작하십시오. 해당 신청서가 끝날 때까지 기다려서 (프로세스가 종료 됨) 내 실행을 계속 진행하고 싶습니다. 내가 어떻게 해?
동시에 실행되는 'ABC'응용 프로그램의 인스턴스가 여러 개있을 수 있습니다.
나는 당신이 단지 이것을 원한다고 생각한다.
메서드에 대한 MSDN 페이지를 참조하십시오. 또한 타임 아웃을 지정할 수있는 오버로드가 있으므로 잠재적으로 영원히 대기하지 않습니다.
Process. WaitForExit을 사용 하시겠습니까? 또는 차단하지 않으려면 Process. Exited 이벤트에 가입하십시오. 그게 당신이 원하는대로하지 않는다면, 우리에게 당신의 요구 사항에 대한 더 많은 정보를주십시오.
내 신청서에서 다음을 수행합니다.
유용 할 수있는 몇 가지 추가 기능이 있습니다.
exit를 기다리거나 HasExited 속성을 catch하고 UI를 업데이트하여 사용자에게 "정보 제공"(기대 관리)을 유지할 수 있습니다.
Comments
Post a Comment