2009-06-23 6 views
0

Windows XP를 실행하는 일부 키오스크에 대해 다소 전문화 된 화면 보호기 응용 프로그램을 구축하고 있습니다. 사용자는 홈페이지에 브라우저를 리턴하지 않고 키오스크를두고하는 경향이 있기 때문에 화면 보호기는 다음을 수행 : 표준 화면 보호기 메커니즘 Windows XP 화면 보호기 - 화면 보호기로 프로세스 다이 시작

  • 를 통해

    1. 출시에는 최근 활동이없는 것을 사용자에게 통지하고, 브라우저가 X 초 후에 닫힙니다.
    2. 사용자 활동없이 X 초가 지나면 화면 보호기는 Process.GetProcessesByName을 통해 현재 브라우저 인스턴스를 모두 종료하고 Process.Start를 통해 구성된 웹 사이트를 가리키는 브라우저의 새 인스턴스를 시작합니다.
    3. 사용자가 마우스를 움직이거나 키를 누를 때까지 화면이 "꺼집니다"-이 시점에서 화면 보호기 응용 프로그램이 종료됩니다.

    Windows Vista 또는 2008에서 실행하면 모든 것이 정상적으로 작동합니다.

    그러나 Windows XP (키오스크가 실행되는 화면)에서 화면 보호기 응용 프로그램이 종료되면 브라우저 프로세스가 종료됩니다. 화면 보호기가 존재하기 직전에 Thread.Sleep을 추가하면 화면 보호기가 종료 될 때까지 브라우저를보고 상호 작용할 수 있습니다.

    문제를 더욱 복잡하게 만들기 위해 설정 영역에서 "미리보기"단추를 클릭하여 화면 보호기를 실행할 때 Windows XP가이 동작을 나타내지 않습니다. 즉, 예상대로 작동합니다. 이 경우 정확히 동일한 코드가 실행됩니다.

    이 테스트는 .NET 2.0 프레임 워크에서하고 나중에 .NET 2.0 SP1을 설치했습니다. Windows 2008 워크 스테이션에는 3.5 SP1이 있습니다.

    시작한 프로세스의 종속성과 관련하여 이러한 .NET 버전간에 약간의 차이점이 있습니까? 실행 된 브라우저 프로세스가 화면 보호기 응용 프로그램에 "연결"되어 있지 않은지 확인하기 위해 설정할 수있는 플래그가 있습니까?

  • 답변

    1

    Windows 바탕 화면 API를 래핑 일부 code at CodeProject을있다. 다른 데스크탑에서 새 프로세스를 열 수있는 기능이 포함되어있어 직접 사용할 수없는 경우 적어도 볼 수 있습니다. (기본적으로 프로세스를 시작할 바탕 화면을 지정할 수있는 Windows API CreateProcess 함수에 대한 매개 변수가 있습니다.)

    그래도 작동하지 않으면 my answer to your other question을 시도해 볼 수 있습니다 (SendMessage inter-process를 사용하여 실제로 스크린 세이버 프로세스 이외의 다른 프로세스가 시작됩니다).프로세스 트리 문제에 대한 최선의 대답은 아니지만 프로세스 트리가 문제가 아닌 경우 실제로 작동 할 수 있습니다.

    +0

    두 번째 제안 (IPC)을해야했습니다. NamedPipeServerStream 및 NamedPipeClientStream 클래스를 구현하기 위해 새 (.NET 3.5에) 클래스를 사용하여 구현했으며 제대로 작동합니다. 먼저 첫 번째 제안을 시도했지만 테스트에서 Windows XP가 "벨트 및 멜빵"규칙을 따르는 것처럼 보입니다. 프로세스 트리를 죽이고 다른 데스크톱에서 실행되는 것처럼 보입니다. 결국 IPC 방식이 쉽게 구현할 수 있습니다. – user127665

    0

    Process.StartInfo.UseShellExecute를 False로 설정해보십시오 (기본값은 True 임). Process.Start()를 호출하십시오. 그런 식으로 CreateProcess() ShellExecute() 대신 내부적으로 사용됩니다.

    0

    Windows XP는 자체 가상 데스크톱에서 화면 보호기를 실행합니다. 사용자가 별도로 지정하지 않는 한 거기에서 시작하는 모든 프로세스는 가상 데스크톱을 자체 프로세스로 상속합니다. 화면 보호기가 종료되면 가상 데스크톱이 사라져 실제 데스크톱으로 대체됩니다.

    편집 : 자세한 내용은, 볼이 마이크로 소프트 MSDN 페이지 :

    Desktops (Windows)
    CreateProcess function (Windows)
    STARTUPINFO Structure

    +0

    문제가 될 수있는 것처럼 들리 겠지만 - 하위 프로세스를 실행할 데스크톱을 어떻게 지정합니까? – user127665

    관련 문제