우리의 응용 프로그램이 System.Diagnostics.Process
을 통해 프로세스를 생성 배경 스레드를 가지고 응답 :프로세스 .NET에서 Process.Start를 통해 양산 스레드
Process.Start(
new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
}
);
이것은 전혀 문제가 없습니다하는 데 사용됩니다. 하지만 이제 배경 스레드가 자동으로 죽어 가고 있습니다. 전화에서 Process.Start
으로 결코 돌아 오지 않습니다. System.Exception
을 처리하는이 코드의 catch 블록에도 도달하지 못합니다. Visual Studio 디버거에서 throw 될 때 예외를 처리 할 수있게해도 예외가 없습니다. 이상하게도, 그 과정은 잘 산란 해지고 있습니다. 사용자의 기본 브라우저가 예상 URL과 함께 시작됩니다.
우리 프로세스의 진입 점은 권장대로 [STAThread]
으로 표시됩니다.
우리 스레드가 자동 종료되도록 할 수있는 원인은 무엇입니까? 스레드 종료 중에 무슨 일이 일어나고 있는지 디버깅하는 데 사용할 수있는 기술이 있습니까?
업데이트 :
스레드가 결국 살아처럼 보이는; 그것은 단지 전화에서 돌아 오지 않을뿐입니다. 여기에 자사의 스택 추적입니다!!
- [수면 대기에서 또는 가입]
- System.dll을 System.Diagnostics.ShellExecuteHelper.ShellExecuteOnSTAThread() + 0x63 바이트
- System.dll을 System.Diagnostics.Process가 .StartWithShellExecuteEx (System.Diagnostics.ProcessStartInfo startInfo) + 0x19d 바이트
- System.dll을! System.Diagnostics.Process.Start() + 아님 0x39 바이트
- System.dll을! System.Diagnostics.Process.Start (System.Diagnostics 네임 .ProcessStartInfo startInfo) + 0x32 바이트 ,210
- 내 방법
업데이트 2 : 해결 방법으로 작업을 실행하기 위해 쉘을 사용하지 않고
런칭 cmd.exe를. 무리 감사! 그러나, 나는 아직도 을 알고 싶습니다. 왜 콜이 돌아 오지 않는지 알고 싶습니다.
업데이트 3 :
쉘 후크는 반환하지에 대한 호출의 원인이 될 수 있는지에 대한 논리적 설명 같은 소리 않습니다. 불량 모듈을 찾을 수는 없지만 쉘 실행을 통해 실행하려는 마지막 시도 후에 은으로 반환했습니다.
어쨌든 사용자가 프로세스 확장을 방해하여 코드가 반환되지 않을 수있는 셸 확장을로드했을 수 있습니다. 에 대해서는에 대해 아무 것도 할 수 없으므로 올바른 대답은 cmd.exe 프로세스를 시작하는 해결 방법을 사용하는 것입니다.
'Trace.WriteLine' 추가로 놀라움이 없습니다; "프로세스가 시작되었습니다." 라인에 도달하지 못했습니다. – Jacob
cmd.exe를 시작할 때 호출이 여전히 반환되지 않습니다. – Jacob
Bah, UseShellExecute를 false로 설정하면됩니다. – Jacob