Friday, 2 February 2018

프로세스 대기 시간 초과 시간 종료


프로세스 대기 시간 제한 종료
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
VB 나 C #을 사용하여 프로세스를 죽이는 방법은 무엇입니까?
사용자가 이미 Microsoft Word를 열 었는지 확인해야하는 시나리오가 있습니다. 그가 가지고 있다면 winword. exe 프로세스를 종료하고 코드를 계속 실행해야합니다.
어떤 사람이 vb 나 c #를 사용하여 프로세스를 죽이는 코드를 가지고 있습니까?
스택 오버플로에 대한 자세한 내용은 C #을 참조하십시오.
예제는 이미 여기에 게시되었지만 비. exe 버전이 더 잘 작동한다는 것을 알았습니다.
아마도 NotSupportedException을 처리 할 필요가 없을 것입니다. 이는 프로세스가 원격이라는 것을 의미합니다.
Word 프로세스를 완전히 죽일 수는 있지만 (다른 응답 중 일부 참조), 철저히 무례하고 위험합니다. 사용자가 열려있는 문서에서 중요한 변경 사항을 저장하지 않은 경우 어떻게해야합니까? 이것은 부실 한 임시 파일은 말할 것도없고 뒤에서 남을 것입니다.
이것은 아마 당신이이 점 (VB)에 갈 수있는 한 것입니다 :
이렇게하면 열려있는 모든 Word 창이 순서대로 닫힙니다 (해당되는 경우 사용자에게 작업 저장 여부를 묻는 메시지가 나타납니다). 물론 사용자는이 시나리오에서 항상 '취소'를 클릭 할 수 있으므로이 경우도 처리 할 수 ​​있어야합니다. (모든 단어 인스턴스를 닫으십시오. 그렇지 않으면 계속할 수 없습니다.)
다음은 모든 워드 프로세스를 죽이는 방법에 대한 쉬운 예입니다.
보안 문제를 우회하여 Word 프로세스가 실행 중인지 확인하고 사용자가 프로그램을 종료하도록 요청한 다음 앱에서 '계속'버튼을 클릭하면 많은 폴러 애플리케이션을 만들 수 있습니다. 이것은 많은 설치자가 취하는 접근법입니다.
물론 앱에 GUI가있는 경우에만이 작업을 수행 할 수 있습니다.
내 트레이 응용 프로그램에서 Excel과 Word Interops를 정리해야했습니다. 그래서이 간단한 방법은 일반적으로 프로세스를 죽입니다.
이것은 일반적인 예외 처리기를 사용하지만 다른 답변에 명시된 것처럼 여러 예외로 쉽게 분할 될 수 있습니다. 로깅이 오 탐률을 많이 생성하면 (즉, 이미 죽인 결과를 죽일 수 없음)이 작업을 수행 할 수 있습니다. 하지만 지금까지 그렇게 guid (농담).
이것이 내가 그걸 부르는 방식이다.
이 같은 것이 작동합니다.
프로세스가 실행 중인지 감지하고 수동으로 종료하도록 사용자에게 알려주는 것이 더 안전하고 정중 한 방법입니다. 물론 시간 초과를 추가하고 프로세스가 종료 된 경우 프로세스를 종료 할 수도 있습니다.

프로세스 대기 시간 제한 종료
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
Process. WaitForExit를 사용하는 방법.
나는 '때때로'VB에서 작동하는 3 부 애플리케이션을 호출하고있다. (자체 호스팅 WCF이다.) 하지만 때로는 타사 앱이 영원히 멈춰 버리기 때문에 90 초 타이머를 추가했습니다. 문제는, 시간이 초과되었는지 어떻게 알 수 있습니까?
코드는 다음과 같습니다.
제가하고 싶은 것은 이것과 같습니다.
메서드 반환 값 확인 - msdn. microsoft / en - us / library /ty0d8k56.aspx - 호출 시간이 초과되면 False를 반환합니다.
과거에는 WaitForExit을 사용할 때 앱이 멈추는 문제가있었습니다.

프로세스 대기 시간 제한 종료
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
c # ProcessStartInfo. Start - 출력을 읽지 만 시간 초과가 있습니다.
다른 프로세스를 시작하고 끝내기 위해 대기 (제한 시간이 있음)하려면 MSDN에서 다음을 사용할 수 있습니다.
다른 프로세스를 시작하고 출력을 읽으려면 다음 패턴을 사용할 수 있습니다 (SO에서)
어떻게 두 가지를 결합하여 모든 입력을 읽고, 교착 상태에 빠지지 않고, 실행중인 프로세스가 잘못되면 시간 초과가 발생합니까?
이 기술은 출력 버퍼가 4KB 이상의 데이터로 채워지는 경우 중지됩니다. 더 확실한 방법은 출력 스트림에 무언가가 기록 될 때 알림을받을 대리자를 등록하는 것입니다. 다른 게시물에서 이미이 방법을 제안했습니다.
두 클래스를 결합 할 필요는 없습니다. Process 클래스는 출력이 StandardOutput - OutputDataReceived로 전송 될 때 발생하는 이벤트를가집니다.
이벤트에 가입하면 도착한대로 출력물을 읽을 수있게되며, 메인 프로그램 루프에서 시간 초과를 할 수 있습니다.
첫 번째 메소드를 이와 같이 수정할 수 있습니다.
다음과 같이 APM을 사용할 수도 있습니다.
ReadToEnd 호출에 대한 대리자를 정의합니다.
그런 다음 대리인을 사용하여 다음과 같은 메서드를 호출합니다.
편집 : 오류 처리가 명확하게 제거되었습니다.
WaitForExit () 호출 아래 첫 번째 예제의 모든 것을 두 번째 예제에 추가하기 만하면됩니다.

프로세스 대기 시간 제한 종료
내 응용 프로그램에 다음 코드가 있습니다.
System. Diagnostics. Process proc = new System. Diagnostics. Process ();
다른 응용 프로그램을 통해 이것을 호출하면 프로세스가 중지됩니다.
그런 다음 5 초를 기다렸다가 이제는 정상적으로 작동합니다. 그러나이 시간 초과 값은 시스템 리소스 및 입력 응용 프로그램의 처리량에 따라 달라질 수 있으므로이 문제를 수정하는 더 좋은 방법을 찾아야합니다.
그래서, 내 질문은 우리가 System. Diagnostics를 사용하여 프로세스를 만들고 있다면, OS가 별도의 스레드를 만들고 그것을 기본 스레드 또는 UI 스레드로 만드나요?
또는 System. Threading. Thread와 동일한 CLR 스레드를 만드는 중입니까?
Thread-pool을 사용하여 작업자 스레드를 생성하는 것이 더 좋은 선택일까요?
스레드 풀이 사용자 모드 스케줄링을 사용합니까?
이것에 대한 당신의 도움을 감사하십시오.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
모든 답장.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
저는 5000을 값으로 주었고 문제를 해결했습니다. 내 걱정은 다른 시스템 자원, 입력 내용 크기 등으로 유사하게 작동합니까?
관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까?
Windows는 실시간 운영 체제가 아니므로 모든 타이머는 OS의 일정에 따라 달라집니다. 아마도 System. Timers. Timer가 가장 정확합니다.
& quot; 관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까? & quot; 이 기능을 사용 중지했습니다. 이것이 당신이하려는 일이라면, 그것을 가능하게하십시오. 프로세스를 시작하는 데 사용한 스레드를 차단하고 싶지 않으면 백그라운드 스레드에서 시작하십시오. BackgxroundWorker가 이에 적합합니다.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.

No comments:

Post a Comment