C # 프로세스 waitforexit 닫기


C # 프로세스 waitforexit 닫기
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
Process. Kill 후에 Process. WaitForExit을 사용해야합니까?
Process. Kill 후에 Process. WaitForExit을 사용해야합니까?
Process. Kill을 호출 한 직후에 호출 한 프로세스가 종료되면 어떻게 될까요?
이로 인해 Process. Kill이 실패하게됩니까?
편집 : 내 응용 프로그램을 종료하는 과정을 죽일 필요합니다. 이 시점에서 나는 kill이 실패 할 때 상황을 처리 할 의도가 없으므로 프로세스가 종료 될 때까지 기다릴 필요가 없습니다. WaitForExit을 호출하지 않아도된다면 건너 뛸 수 있습니다.
MSDN 문서 (emphasis mine)에 따르면,
참고 Kill 메서드는 비동기 적으로 실행됩니다. Kill 메서드를 호출 한 후 WaitForExit 메서드를 호출하여 프로세스가 종료 될 때까지 기다리거나 HasExited 속성을 검사하여 프로세스가 종료되었는지 확인합니다.
기다릴 필요가 없다면 프로세스가 실제로 존재하는지 확인할 필요가 없다면 WaitForExit를 호출하거나 HasExited를 확인할 필요가 없다고 가정합니다.

C # 프로세스 waitforexit 닫기
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
process. kill ()은 WaitForExit ()을 종료합니다 (시간 제한 없음).
백그라운드에서 실행되는 프로세스가 있고 WaitForExit ()이 있습니다. 기간이 다를 수 있으므로 작업이 완료 될 때까지 기다려야합니다. 경우에 따라 완료하기 전에 종료해야하며 클래스 이벤트를 통해. Kill () 명령을 트리거합니다..HasExited 속성은 true로 변경되지만 코드는 WaitForExit () 줄을 통과하지 않습니다.
내 프로세스는 자바 기반 파일 전송 클라이언트를 시작하고 전송을 수행합니다. 프로세스가 작업 관리자에 나타나고 Kill ()이 종료하지 않습니다. 프로세스를 끝내는 데 정말로 신경 쓰지 않고 다음 프로그램으로 넘어가려면 내 프로그램이 필요하므로 Kill () 바로 다음에 WaitForExit을 해제하고 내 코드를 "계속 진행"할 수있게 Close ()를 추가했습니다. 프로세스를 일찍 종료하는 것은 내 앱에서 드문 경우이지만 여전히 작동해야하므로 구현해야합니다.
WaitForExit은 프로세스 핸들이 신호를받을 때까지 기다리는 OS에 대한 직접 호출입니다. 프로세스가 종료되면 WaitForExit가 완료됩니다. Kill은 TerminateProcess에 대한 직접 호출입니다. 이 호출은 아무런 질문도없이 죽입니다. 올바르게 사용되면 Kill이 완료되면 WaitForExit이 리턴됩니다.
그래서 코드에 다른 버그가 있습니다. 더 간단한 재 작성을하면 문제가 사라지는 것을 알 수 있습니다. 이 버그는 코드의 복잡성에 숨어 있습니다.
또는 WaitForExit가 반환되었지만 통지하지 않았습니다. 또는 죽임당한 적이 없거나 실패했습니다. 다시 말하지만, 코드를 단순화하면 문제가 드러납니다. 5 라인짜리 책으로 가져다 줄 수 있어요? 나는 네가 할 수 있을지는 의심하지만, 네가 그렇게한다면 나는 다시 보게 될 것이다.
살인 핑은 작동하지만 귀하의 특수 프로세스를 죽이는 것은 귀하가 지정한 코멘트에서 볼 수 없습니다. 원인은 대개 취소 할 수없는 IO입니다. Windows 커널은 모든 IO가 완료 될 때까지 프로세스를 유지합니다. 좋은 소식은 프로세스가 결국 죽을 것이고 Kill이 반환 된 후에 코드가 실행되지 않는다는 것입니다. 나쁜 소식은 자원 정리가 완전히 완료되지 않았다는 것입니다.

C # 프로세스 waitforexit 닫기
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
WaitforExit이 제대로 작동하지 않습니다.
그래서 나는 잠시 동안이 문제에 대해 싸워 왔으며 그것을 해결하기위한 여러 가지 방법을 시도했지만 그렇게 할 수는 없습니다.
Bascally waht 내 애플 리케이션은 자바 파일을 호출하여 디바이스에 애플리케이션을로드한다. 로드하는 동안 그것을 richtext 상자에 인쇄하고, 다음 파일로 이동하고 싶습니다. 내가 겪고있는 문제는 첫 번째 파일이로드되는 동안 2 번째 문제를로드하려고 시도한다는 것입니다. 나가기를 기다렸지 만 그렇게하면 출력 데이터가 서식있는 텍스트 상자에 쓰여지지 않습니다. 어떤 아이디어?
나는 여러 다른 장소에서 출구 기다림을 시도했지만 작동하지 않는 것 같습니다.
아래의 두 가지 방법은 stdout 또는 error를 richtext 필드에 씁니다.
어떤 아이디어라도 좋을 것입니다. Bascally 끝내려면 프로세스가 필요하므로 forloop이 다음 파일을로드하는 것으로 계속 생각할 수 있습니다.
WaitForExit을 사용하면 프로세스가 종료 될 때까지 응용 프로그램이 대기 (대기)합니다. 이는 UI 스레드에서 Windows 메시지를 처리 ​​할 수 ​​없으므로 UI를 업데이트하지 않음을 의미합니다.
"백그라운드에서"프로세스를 시작해야 UI가 계속 새로 고침됩니다. 이 작업은 다음을 사용하여 수행 할 수 있습니다.
별도의 스레드에서 프로세스를 시작하고 모니터링하고 진행 정보를 UI 스레드로 다시 전달하여 표시합니다. 프로세스 처리 이벤트에 이벤트 처리기를 추가하거나 프로세스를 주기적으로 폴링합니다. HasExited 플래그를 사용하여 첫 번째 프로세스의 상태를 파악합니다 끝마친. 이벤트 처리기는이 프로세스를 시작한 다음 기본 응용 프로그램 루프로 다시 나가서 외부 프로세스가 끝날 때까지 기다리는 동안 정상적으로 실행되도록합니다.
완료 될 때까지 바쁜 대기 루프에 앉아 애플리케이션 이벤트를 처리하십시오. (이 코드에 대한 재 호출 호출을 유발하는 모든 이벤트는 매우 나쁜 작업을 수행 할 수 있으므로 일반적으로이 방법을 사용하면 나머지 응용 프로그램을 알고있는 상태에서 "잠겨"있는지 확인해야합니다 프로세스가 완료되기를 기다리는 중입니다). 이것은 효과적으로 WaitForExit이하는 일이지만 응용 프로그램 이벤트도 처리하므로 UI가 막연하게 응답 할 수 있습니다.
나는 여기에서 완전히 틀릴지도 모른다.
-jar 뒤에 공백이 있어야합니다.
그렇지 않으면 Java가 즉시 폭탄을 터뜨릴 것입니다.
UI 스레드에서 WaitForExit 호출을 이동하는 중입니다.
M. Babcock이 언급했듯이, 당신은 서식있는 텍스트 상자에 대한 업데이트를 기다리고 있습니다.
이와 비슷한 해결책이 효과적 일 수 있습니다.
목록을 처리하는 새 스레드를 시작하려면 btnLoad_Click을 수정하십시오 (count> 0 브랜치에 있음).

C # 프로세스 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를 호출하는 것입니다. 닫지 말고, 말했듯이 객체를 다 처리했음을 알게됩니다.
IDisposable을 구현하는 무언가에 대해 Close 만 호출하면 개발자가 실수로 실수를 저 지르려고합니다. Dispose가 Close에 위임하는 것 이상의 추가 정리를 수행하는 경우 프로그래머는 Close를 호출하여 스스로를 버그로 설정합니다.
닫기를 호출하는 경우가있을 수 있습니다. 단, 마지막 응답의 맨 아래에 표시된대로 개체를 완료하지 않은 경우에만 가능합니다. 그러나 그걸로 끝나면 Dispose에게 전화하십시오.
내가 아는 한, 이들은 기능적으로 동일합니다 :
using (SomethingDisposable myObject =.)를 사용합니다.
// 여기서 myObject를 사용하십시오.
// 여기서 myObject를 사용하십시오.
if (myObject! = null) myObject. Dispose ();
따라서 첫 번째 권장 사항이 using 블록을 사용하는 경우 다음 단계는 Dispose를 호출하는 것입니다. 닫지 말고, 말했듯이 객체를 다 처리했음을 알게됩니다.
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 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.

Comments

Popular posts from this blog

Cara menghitung profit dalam forex

모자 및 무역 시스템의 이점

Cms 외환 두바이