2009-06-23 30 views
0

Windows XPを実行するいくつかのキオスクでは、かなり専門的なスクリーンセーバーアプリケーションを構築しています。何の最近の活動がなかったことをユーザに通知しWindows XPスクリーンセーバー - スクリーンセーバーでプロセスダイを公開

  • 標準のスクリーンセーバー機構を介して

    1. を発表、そして:ユーザーは、スクリーンセーバーが次んので、ホームページにブラウザを返さずにキオスクを残す傾向にありますブラウザはX秒後に終了します。
    2. ユーザーアクティビティなしでX秒が経過すると、スクリーンセーバーは(Process.GetProcessesByNameを介して)現在のすべてのブラウザインスタンスを強制終了し、Process.Start経由で設定されたWebサイトを指し示すブラウザの新しいインスタンスを開始します。
    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を試してみてください。実際に起動するためのスクリーンセーバープロセスの他に別のプロセス)。これはプロセスツリーの問題に対する最良の答えではありませんが、プロセスツリーが問題でない場合は実際にはうまくいくかもしれません。

    +0

    私はあなたの2番目の提案(IPC)をしなければなりませんでした。私はそれを実装するために新しい(.NET 3.5への)NamedPipeServerStreamとNamedPipeClientStreamクラスを使用して終了し、うまくいきます。 最初に最初の提案を試みましたが、Windows XPが "ベルトとサスペンド"のルールに従っているように見えます。プロセスツリーを殺して別のデスクトップで実行するように見えます。実装が簡単です。 – user127665

    0

    Process.StartInfo.UseShellExecuteをFalse(デフォルトではTrue)に設定してからProcess.Start()を呼び出してみてください。つまり、CreateProcess()はShellExecute()の代わりに内部的に使用されます。

    0

    Windows XPは、独自の仮想デスクトップでスクリーンセーバーを実行します。そこから開始するプロセスは、特に指定しないかぎり、仮想デスクトップを独自のものとして継承します。スクリーンセーバーが終了すると、仮想デスクトップが離れて本物のデスクトップに置き換えられます。

    編集:詳細については、これらのマイクロソフトMSDNページを参照してください。

    Desktops (Windows)
    CreateProcess function (Windows)
    STARTUPINFO Structure

    +0

    それは問題のように聞こえます - どのデスクトップを使用して子プロセスを実行するのかを指定しますか? – user127665

    関連する問題