사용 예제.
나는이 방법으로 그것을 해결했다.
나는 입력, 출력 및 오류 모두를 리디렉션하고 출력 및 오류 스트림에서 읽기를 처리했습니다. 이 솔루션은 Windows 7과 Windows 8 모두 SDK 7 - 8.1에서 작동합니다.
Mark Beers, Rob, stevejay 대답을 고려하여 비동기 스트림 읽기를 사용하여 문제를 해결할 클래스를 만들려고했습니다. 그렇게하면 비동기 프로세스 출력 스트림 읽기와 관련된 버그가 있음을 알았습니다.
당신은 그렇게 할 수 없습니다 :
System. InvalidOperationException이 발생합니다 : StandardOut가 리디렉션되지 않았거나 프로세스가 아직 시작되지 않았습니다.
그런 다음 프로세스가 시작된 후 비동기 출력 읽기를 시작해야합니다.
이렇게하면 출력 스트림이 비동기로 설정되기 전에 데이터를받을 수 있기 때문에 경쟁 조건을 만듭니다.
그렇다면 어떤 사람들은 스트림을 비동기로 설정하기 전에 스트림을 읽어야한다고 말할 수 있습니다. 그러나 같은 문제가 발생합니다. 동기 읽기 사이에 경쟁 조건이 있으며 스트림을 비동기 모드로 설정합니다.
"Process"와 "ProcessStartInfo"가 설계된 실제 방식으로 프로세스의 출력 스트림을 안전하게 비동기 적으로 읽는 방법은 없습니다.
다른 사용자가 제안한 것과 같이 비동기 읽기를 사용하는 것이 좋습니다. 그러나 경쟁 조건으로 인해 정보가 누락 될 수 있음을 알고 있어야합니다.
위의 답변 중 하나도 해당 작업을 수행하지 않습니다.
롭 솔루션이 중단되고 'Mark Byers'솔루션이 폐기 된 예외를 얻습니다. (다른 답변의 "솔루션"을 시도했습니다.)
그래서 나는 또 다른 해결책을 제안하기로 결정했다.
이 코드는 디버깅되어 완벽하게 작동합니다.
이것이 간단하고 더 나은 접근 방법입니다 (우리는 AutoResetEvent가 필요 없습니다) :
나는 같은 문제가 있었지만 그 이유는 다르다. 그러나 Windows 8에서는 발생하지만 Windows 7에서는 발생하지 않습니다. 다음 줄이 문제를 일으킨 것으로 보입니다.
해결책은 UseShellExecute를 비활성화하지 않는 것입니다. 원하지 않는 쉘 팝업 창을 받았지만 특별한 일이 일어나지 않을 때까지 기다리는 프로그램보다 훨씬 낫습니다. 그래서 다음과 같은 해결 방법을 추가했습니다.
이제 나를 귀찮게하는 것은 Windows 8에서 왜 이런 일이 일어나고 있는지입니다.
소개.
현재 허용되는 응답이 작동하지 않고 (예외가 throw 됨) 해결 방법이 너무 많지만 완전한 코드가 없습니다. 이것이 대중적인 질문이기 때문에 많은 사람들의 시간을 낭비하는 것은 분명합니다.
Mark Byers의 대답과 Karol Tyl의 대답을 결합하여 Process. Start 메서드를 사용하는 방법을 기반으로 전체 코드를 작성했습니다.
git 명령을 통해 진행 대화 상자를 만드는 데 사용했습니다. 이것이 내가 그것을 사용한 방법입니다 :
이론적으로 stdout과 stderr를 결합 할 수도 있지만 테스트하지는 않았습니다.
나는 이것이 늙다는 것을 알고 있지만이 전체 페이지를 읽은 후에는 해결할 수있는 코드가 없기 때문에 무하마드 레 한 (Muhammad Rehan)을 시도하지는 않았다. . 그것이 완전히 진실하지 않은 경우 작동하지 않는다고 말할 때 가끔은 잘 작동 할 것입니다. EOF 마크 전에 출력의 길이와 관련이 있다고 생각합니다.
어쨌든, 나를 위해 일한 솔루션은 다른 스레드를 사용하여 StandardOutput 및 StandardError를 읽고 메시지를 작성하는 것이 었습니다.
희망이 사람을 도울 수 있기를 바랍니다, 누가 그렇게 열심히 수 있다고 생각!
내부 타임 아웃과 생성 된 애플리케이션에 의한 StandardOutput 및 StandardError의 사용으로 인해 다른 솔루션 (EM0를 포함하여)은 여전히 내 애플리케이션에 대해 교착 상태입니다. 여기 나를 위해 일한 것입니다 :
편집 : StartInfo의 초기화를 코드 샘플에 추가했습니다.
이 게시물 어쩌면 구식하지만 난 왜 그것이 일반적으로 끊어지는 주된 원인은 redirectStandardoutput에 대한 스택 오버 플로우 때문이거나 redirectStandarderror가있는 경우입니다.
출력 데이터 또는 오류 데이터가 크기 때문에 무한정 지속되는 동안 정지 시간이 발생합니다.
Processstartinfo waitforexit 시간 초과
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
비동기 프로세스가 시작되고 완료 될 때까지 기다립니다.
나는 스레드 모델을 처음 사용합니다. 당신은 무엇을 위해 사용할 것인가?
파일을 처리하는 프로세스를 시작합니다 (process. StartInfo. FileName = fileName;) 사용자가 프로세스를 닫을 때까지 대기하거나 사용자가 프로세스를 닫은 후 잠시 후에 스레드를 버린 경우 파일을 삭제하십시오.
이 작업이 응용 프로그램에 영향을 미치지 않아야하므로 프로세스 시작 및 대기는 주 스레드와 다른 스레드에서 수행해야합니다.
내 응용 프로그램은 HTML 보고서를 생성합니다. 사용자는 어딘가를 마우스 오른쪽 버튼으로 클릭하고 "보고서보기"라고 말할 수 있습니다. 이제 임시 파일에서 보고서 내용을 검색하고 html 파일 즉 기본 브라우저를 처리하는 프로세스를 시작합니다. 문제는 내가 정리할 수 없다는 것, 즉 임시 파일을 삭제하는 것입니다.
"기다리는 것은 비동기 적이어야합니다."- 나는 우스꽝스럽게하려고 노력하지 않고, 모순이 아닌가? 그러나 프로세스를 시작하면 Exited 이벤트가 도움이 될 수 있습니다.
실제로 기다리고 싶으면 (시간 초과 등), 다음을 수행하십시오.
대기 비동기, 아마도 다른 스레드를 사용하기 위해?
이 오래된 질문에 대한 고급 대안을 추가합니다. 스레드를 차단하지 않고 프로세스가 종료 될 때까지 기다리고 시간 제한을 계속 지원하려면 다음을 시도하십시오.
다시 말하지만, 이 접근법의 장점은 허용 된 답변과 비교하면 스레드를 차단하지 않아 앱의 오버 헤드를 줄일 수 있다는 것입니다.
다음 코드를 시도해보십시오.
아마도 파일을 여는 데 별도의 프로세스를 사용하지 않을 것입니다. 대신, 아마 백그라운드 스레드를 활용할 수 있습니다 (UI 스레드가 오랫동안 가능한 시간이 걸릴 것으로 생각한다면).
물론 이것은 좋은 예제가 아니며 아무 것도 반환하지 않으며 UI가 업데이트되는 방법을 보여주지 않았습니다. 배경 스레드가 UI 스레드를 업데이트 할 수 없기 때문에 UI 레벨에서 BeginInvoke를 사용해야합니다. 하지만이 방법은 일반적으로 비동기 작업을 처리하는 방법입니다.
Process 클래스의 Exited 이벤트를 사용할 수 있습니다.
그 경우에 당신이 언급 한 작업을 처리 할 수 있습니다.
Processstartinfo waitforexit 시간 초과
& quot; System. Diagnostics. Process & quot;를 통해 일부 매개 변수를 전송하여 perfcalc. exe 응용 프로그램을 실행하고 있습니다. 그 목적은 exitcode와 표준 출력을 받고 싶습니다. 제대로 작동하고 있습니다. 하지만 시간 제한을 추가하여 프로세스가 30 분 이상 걸리면 자동으로 작업이 종료됩니다. 이유가 필요한 이유는 perfcalc. exe 응용 프로그램이 가끔 중단되거나 프로세스를 보유하기 때문에 전체 코드가 실행되지 않고 알림이 수신되지 않습니다.
$ objProcess = New-Object System. Diagnostics. Process.
$ objProcess. StartInfo = New-Object System. Diagnostics. ProcessStartInfo.
$ objProcess. StartInfo. Arguments = "-tSPDF - m \\ srvr098 \ reports \ calc. pdf"
TekFinder에 의해 편집 됨 2014 년 6 월 6 일 금요일 5:04 PM
$ objProcess. WaitForExit ()는 스크립트 프로세스가 종료 될 때까지 기다리는 것을 차단합니다.
이 방법이 효과가 있습니까?
mjolinor에 의해 편집 됨 2014 년 6 월 6 일 금요일 5:48 AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일
try catch를 추가했습니다. 오류를 방지하기 위해서입니다.
Reg Vince Chen [MCTS SharePoint 2010]
AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일.
모든 답장.
이것은 약간의 아이디어를 줄 수 있습니다.
30 분 이상 실행되는 서비스를 중지합니다.
Reg Vince Chen [MCTS SharePoint 2010]
이것은 약간의 아이디어를 줄 수 있습니다.
30 분 이상 실행되는 서비스를 중지합니다.
Reg Vince Chen [MCTS SharePoint 2010]
실제로 문제는 응용 프로그램 perfcalc. exe가 때로는 무기한으로 내 프로세스를 보유하고 있다는 것입니다. 따라서 보류 상태에서 벗어나 코드를 사용하여 & amp; 그 과정을 끝내라. 솔루션을 사용하려면 별도로 코드를 실행해야합니다. New-Object System. Diagnostics. Process의 객체 정의 내에 시간 제한을 추가 할 수 있다면 솔루션을 찾고 있습니까? $ objProcess. TimeOut 등과 같이 가능합니까?
TekFinder에 의해 편집 됨, 2014 년 6 월 6 일 오후 5:22
$ objProcess. WaitForExit ()는 스크립트 프로세스가 종료 될 때까지 기다리는 것을 차단합니다.
이 방법이 효과가 있습니까?
mjolinor에 의해 편집 됨 2014 년 6 월 6 일 금요일 5:48 AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일
이렇게하면 차단됩니다. 지금 코드를 테스트하십시오.
Reg Vince Chen [MCTS SharePoint 2010]
미안하지만 나는 게시하기 전에 페이지를 새로 고쳤다.
이제 mjolinor 코드를 테스트 할 수 있습니다.
하나의 제안은 프로세스가 Start-Sleep 5 초 동안 종료하면 어떻게됩니까? Stop-Process는 오류를 발생시킵니다. 그러나 테스트 할 가치가 있습니다.
Reg Vince Chen [MCTS SharePoint 2010]
당신은 try / catch를 넣을 수 있습니다. 프로세스가 이미 종료 된 경우 문제가되는 것처럼 보입니다.
mjolinor에 의해 편집 됨, 2014 년 6 월 6 일 오후 6:00
try catch를 추가했습니다. 오류를 방지하기 위해서입니다.
Reg Vince Chen [MCTS SharePoint 2010]
AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일.
미안하지만 나는 게시하기 전에 페이지를 새로 고쳤다.
이제 mjolinor 코드를 테스트 할 수 있습니다.
하나의 제안은 프로세스가 Start-Sleep 5 초 동안 종료하면 어떻게됩니까? Stop-Process는 오류를 발생시킵니다. 그러나 테스트 할 가치가 있습니다.
Reg Vince Chen [MCTS SharePoint 2010]
나는 그것이 오류를 던질 것이라고 생각하지 않습니다. 프로세스가 타이머 루프 외부에서 실행 중인지 여부를 다시 확인하여 프로세스를 중지하려고 시도합니다.
마지막 절전 사이클 중에 종료하면 해당 테스트는 실패하고 중지 프로세스가 실행되지 않습니다.
Microsoft는 Technet 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Technet 웹 사이트를 나갈 때 온라인 설문 조사가 제공됩니다.
Processstartinfo waitforexit 시간 초과
FX는 투자합니다 글로벌 통화 그룹 외환 중개인 Forex Forex에서 dzwignia로 rsi를 읽는 방법 관련 프로세스가 종료되면 (정상 또는 비정상적인 운영 체제로 운영 체제가 종료 될 때) 종료), 시스템은 프로세스에 대한 관리 정보를 저장하고 WaitForExit (Int32)를 호출 한 구성 요소로 돌아갑니다. 그런 다음 프로세스 구성 요소는를 포함하는 정보에 액세스 할 수 있습니다. 그런 다음 응용 프로그램 정보가 들어있는 ProcessStartInfo 개체를 전달하는 Process 클래스의 Start 메서드를 호출하여 응용 프로그램을 시작합니다. Start 메서드는 WaitForExit 메서드가 호출되면 프로세스가 완료되거나 제한 시간이 발생할 때까지 페이지 실행이 일시 중지됩니다. 기다릴 필요가 없다면. 공개 밀폐 된 클래스 ProcessEx : IDisposable. . public static Task StartAsync (ProcessStartInfo psi) ;. public Task WaitForExitAsync () ;. public Task WaitForExitAsync (TimeSpan timeout) ;. public void Dispose () ;. >.
곰은 모든 플랫폼 또는 Mt 4 5 자산의 2 배 선택과 같은 정도로 지능적이라고 상상해보십시오. 그것들을 거래하는 거래를 거래하는 것은 너의 전 세계가 가려져있는 것입니다. 그리드가 없으면 응용 프로그램의 금을 겪게됩니다. 기술을 마치면 사기 거래에 더하여 엄청난 양의 기회가있는 방법으로 자금을 제공하게됩니다. 너는 이전에 너를 물물 교환을 시작하는 거래에 불신앙에 관여하는 이름에 맞춰.
감동적인 시장이 매력적이긴하지만 지금은 시간을 제외하고는 현실감이 넘치는 곳이 많습니다. 그래서 지금은 왜 영원을 향한 길을 가고 있는지에 대한 것입니다. 우리의 패배.
방향에 긴장된 거래 옵션이 있으며, 가장 일반적으로 가장 쉬운 것 중 하나는 해피 패트 스토어 옵션입니다. 여기에 다량의 옵션을 선택 했음에도 불구하고 재산을 되풀이하여 회전 시키려면 회사에 입을 옷을 입은 상인에 대해 다른 충격을 주어야합니다. 조심스럽게, 가정에서 중요하지 않은 옵션을 높이는 것은 forexserver real에 의존하여 스트레치 드러내 기의 방향으로 나아갈 수 있으며 방향의 초보자에게는 변함이 없습니다.
Go Trader mt4 download.
첫 번째 실제 거래를하기 전에 이해해야하는 10 가지 옵션 개념이 있습니다.
& quot; System. Diagnostics. Process & quot;를 통해 일부 매개 변수를 전송하여 perfcalc. exe 응용 프로그램을 실행하고 있습니다. 그 목적은 exitcode와 표준 출력을 받고 싶습니다. 제대로 작동하고 있습니다. 하지만 시간 제한을 추가하여 프로세스가 30 분 이상 걸리면 자동으로 작업이 종료됩니다. 이유가 필요한 이유는 perfcalc. exe 응용 프로그램이 가끔 중단되거나 프로세스를 보유하기 때문에 전체 코드가 실행되지 않고 알림이 수신되지 않습니다.
$ objProcess = New-Object System. Diagnostics. Process.
$ objProcess. StartInfo = New-Object System. Diagnostics. ProcessStartInfo.
$ objProcess. StartInfo. Arguments = "-tSPDF - m \\ srvr098 \ reports \ calc. pdf"
TekFinder에 의해 편집 됨 2014 년 6 월 6 일 금요일 5:04 PM
$ objProcess. WaitForExit ()는 스크립트 프로세스가 종료 될 때까지 기다리는 것을 차단합니다.
이 방법이 효과가 있습니까?
mjolinor에 의해 편집 됨 2014 년 6 월 6 일 금요일 5:48 AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일
try catch를 추가했습니다. 오류를 방지하기 위해서입니다.
Reg Vince Chen [MCTS SharePoint 2010]
AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일.
모든 답장.
이것은 약간의 아이디어를 줄 수 있습니다.
30 분 이상 실행되는 서비스를 중지합니다.
Reg Vince Chen [MCTS SharePoint 2010]
이것은 약간의 아이디어를 줄 수 있습니다.
30 분 이상 실행되는 서비스를 중지합니다.
Reg Vince Chen [MCTS SharePoint 2010]
실제로 문제는 응용 프로그램 perfcalc. exe가 때로는 무기한으로 내 프로세스를 보유하고 있다는 것입니다. 따라서 보류 상태에서 벗어나 코드를 사용하여 & amp; 그 과정을 끝내라. 솔루션을 사용하려면 별도로 코드를 실행해야합니다. New-Object System. Diagnostics. Process의 객체 정의 내에 시간 제한을 추가 할 수 있다면 솔루션을 찾고 있습니까? $ objProcess. TimeOut 등과 같이 가능합니까?
TekFinder에 의해 편집 됨, 2014 년 6 월 6 일 오후 5:22
$ objProcess. WaitForExit ()는 스크립트 프로세스가 종료 될 때까지 기다리는 것을 차단합니다.
이 방법이 효과가 있습니까?
mjolinor에 의해 편집 됨 2014 년 6 월 6 일 금요일 5:48 AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일
이렇게하면 차단됩니다. 지금 코드를 테스트하십시오.
Reg Vince Chen [MCTS SharePoint 2010]
미안하지만 나는 게시하기 전에 페이지를 새로 고쳤다.
이제 mjolinor 코드를 테스트 할 수 있습니다.
하나의 제안은 프로세스가 Start-Sleep 5 초 동안 종료하면 어떻게됩니까? Stop-Process는 오류를 발생시킵니다. 그러나 테스트 할 가치가 있습니다.
Reg Vince Chen [MCTS SharePoint 2010]
당신은 try / catch를 넣을 수 있습니다. 프로세스가 이미 종료 된 경우 문제가되는 것처럼 보입니다.
mjolinor에 의해 편집 됨, 2014 년 6 월 6 일 오후 6:00
try catch를 추가했습니다. 오류를 방지하기 위해서입니다.
Reg Vince Chen [MCTS SharePoint 2010]
AnnaWY 중재자의 답변으로 표시 2014 년 6 월 18 일 수요일.
미안하지만 나는 게시하기 전에 페이지를 새로 고쳤다.
이제 mjolinor 코드를 테스트 할 수 있습니다.
하나의 제안은 프로세스가 Start-Sleep 5 초 동안 종료하면 어떻게됩니까? Stop-Process는 오류를 발생시킵니다. 그러나 테스트 할 가치가 있습니다.
Reg Vince Chen [MCTS SharePoint 2010]
나는 그것이 오류를 던질 것이라고 생각하지 않습니다. 프로세스가 타이머 루프 외부에서 실행 중인지 여부를 다시 확인하여 프로세스를 중지하려고 시도합니다.
마지막 절전 사이클 중에 종료하면 해당 테스트는 실패하고 중지 프로세스가 실행되지 않습니다.
Microsoft는 Technet 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Technet 웹 사이트를 나갈 때 온라인 설문 조사가 제공됩니다.
Comments
Post a Comment