Windows XP를 실행하는 일부 키오스크에 대해 다소 전문화 된 화면 보호기 응용 프로그램을 구축하고 있습니다. 사용자는 홈페이지에 브라우저를 리턴하지 않고 키오스크를두고하는 경향이 있기 때문에 화면 보호기는 다음을 수행 : 표준 화면 보호기 메커니즘 Windows XP 화면 보호기 - 화면 보호기로 프로세스 다이 시작
- 출시에는 최근 활동이없는 것을 사용자에게 통지하고, 브라우저가 X 초 후에 닫힙니다.
- 사용자 활동없이 X 초가 지나면 화면 보호기는 Process.GetProcessesByName을 통해 현재 브라우저 인스턴스를 모두 종료하고 Process.Start를 통해 구성된 웹 사이트를 가리키는 브라우저의 새 인스턴스를 시작합니다.
- 사용자가 마우스를 움직이거나 키를 누를 때까지 화면이 "꺼집니다"-이 시점에서 화면 보호기 응용 프로그램이 종료됩니다.
Windows Vista 또는 2008에서 실행하면 모든 것이 정상적으로 작동합니다.
그러나 Windows XP (키오스크가 실행되는 화면)에서 화면 보호기 응용 프로그램이 종료되면 브라우저 프로세스가 종료됩니다. 화면 보호기가 존재하기 직전에 Thread.Sleep을 추가하면 화면 보호기가 종료 될 때까지 브라우저를보고 상호 작용할 수 있습니다.
문제를 더욱 복잡하게 만들기 위해 설정 영역에서 "미리보기"단추를 클릭하여 화면 보호기를 실행할 때 Windows XP가이 동작을 나타내지 않습니다. 즉, 예상대로 작동합니다. 이 경우 정확히 동일한 코드가 실행됩니다.
이 테스트는 .NET 2.0 프레임 워크에서하고 나중에 .NET 2.0 SP1을 설치했습니다. Windows 2008 워크 스테이션에는 3.5 SP1이 있습니다.
시작한 프로세스의 종속성과 관련하여 이러한 .NET 버전간에 약간의 차이점이 있습니까? 실행 된 브라우저 프로세스가 화면 보호기 응용 프로그램에 "연결"되어 있지 않은지 확인하기 위해 설정할 수있는 플래그가 있습니까?
두 번째 제안 (IPC)을해야했습니다. NamedPipeServerStream 및 NamedPipeClientStream 클래스를 구현하기 위해 새 (.NET 3.5에) 클래스를 사용하여 구현했으며 제대로 작동합니다. 먼저 첫 번째 제안을 시도했지만 테스트에서 Windows XP가 "벨트 및 멜빵"규칙을 따르는 것처럼 보입니다. 프로세스 트리를 죽이고 다른 데스크톱에서 실행되는 것처럼 보입니다. 결국 IPC 방식이 쉽게 구현할 수 있습니다. – user127665