4

私はいたるところを検索し、ほぼすべてを試しましたが、これは不可能だと思い始めています。セッション0(win7)でSYSTEMとしてサービスを実行しています。外部アプリケーションを起動する必要があります。外部アプリケーションをSYSTEMとして起動するだけで、アプリケーションが起動し、GUIが表示されます(UI0Detectを使用してセッション0をクリックした場合)。私がそれを見ることができることに加えて、アプリケーションを起動した私のサービスは、実際にGUIのスクリーンショットを撮り、それをサーバーに送り返すことができます。-この時点ですべてが良好です。

問題-外部アプリケーションがSYSTEMコンテキストで実行できない場合があります。このような場合、別のユーザーとして起動する必要があります。セッション0で実際のユーザーとして実行している別のサービスがあります。次に、この別のユーザーとして外部アプリケーションを起動します。外部アプリケーションはセッション0で起動され、WinSta0 \ Defaultを指定して、SYSTEMサービスが認識できるのと同じデスクトップでアプリケーションGUIが起動されるようにします。これが発生すると、UI0Detectがポップアップ表示され、クリックしてウィンドウが表示されるという印象を与えます。セッション0に戻るとき、またはサービスがスクリーンショットを試行するとき、小さなブラックボックスが表示されます。これは、SYSTEMアカウントのみがセッション0でウィンドウをレンダリングできるようです-これは本当ですか?セッション0で実行されているユーザーアカウントがGUIをレンダリングできるかどうか誰かが知っていますか?

セッション0からアクティブユーザーのデスクトップにアプリケーションを起動する方法に関するコードを探していません。それは十分に文書化されています。私が知る必要があるのは、逆(一種)をどのようにやってのけるかです。SYSTEM以外のアカウントからセッション0でGUIを起動する必要があります。

4

1 に答える 1

2

MSDNから:「サービスの種類で SERVICE_INTERACTIVE_PROCESS が指定されている場合、サービスは LocalSystem アカウントで実行する必要があります。」

したがって、あなたがやろうとしていることを行うためのサポートされている方法はありません。ただし、SYSTEM として実行されるサービスを取得して、問題のデスクトップ (およびおそらくウィンドウ ステーション) のアクセス許可を変更することで、機能させることができる場合があります。この方法でデスクトップを共有すると、問題のアプリケーションまたはユーザー アカウントが侵害された場合、システム アカウントが侵害される可能性があることに注意してください。

または、セッション 0 で新しいデスクトップを (適切な権限で) 作成し、そこでアプリケーションを起動してみてください。インタラクティブなユーザーがこのデスクトップを見ることができるかどうかはわかりませんが、同じデスクトップ (できれば同じユーザー コンテキスト) で別のアプリケーションを起動して、代わりにスクリーンショットを撮ることで、スクリーンショットを撮ることができます。

于 2012-07-19T19:46:45.343 に答える