2017-05-30 8 views
0

Winformsアプリケーションで使用されるコードがあります。同じコードがWindowsサービス(Windowsサービスとして実行されているexe)でも使用されています。このコードはハンドルをICONにつかみます。しかし、私が見つけたのは、Task Mangaer(とGDI View)では、Winformsアプリケーションを実行すると、アプリケーションはGDIカウントを表示します。しかし、Windowsサービス経由でコードを実行すると、タスクマネージャのサービスインスタンスにGDIのカウントが表示されません。つまり、これはWindowsサービスがGDIハンドルを保持できないことを意味しますか?そうであれば、コードはどのように機能するのですか。つまり、ハンドル上で動作するコードはWindowsサービスで実際に動作しています。Windowsサービスと対話型アプリケーションのGDIハンドル

+0

タスクマネージャは、別のセッションのプロセスのGDIカウントを取得できないため、ゼロとして表示します。 –

+0

別のセッションではどういう意味ですか?サービスは私の信任状でも実行されています。 –

+0

Windowsのすべてのプロセスは、「セッション」と呼ばれる特定の「リモートデスクトップセッション」(別名「ターミナルサービスセッション」)で実行されますが、あいまいになる可能性があります。タスクマネージャの「セッションID」列を参照してください。 2人の異なるユーザーが同時にログインすると、それらは異なるセッションにあり、各ユーザーは自分のプロセスのGDIカウントを見ることができますが、他のユーザーのGDIカウントは表示されません。 (Windows 10では、他のユーザーのプロセスを見るために、「管理者としてタスクマネージャー」を実行する必要があります。) –

答えて

1

実際にサービスは、表示面がユーザーには見えないことを除いて、通常のアプリケーションとまったく同じ方法でGDIハンドルを作成して使用することができます。

しかし、タスクマネージャは、基本的には、そうちょうど誤警報それがで実行されていることをare in the same sessionプロセスのために、この情報を照会することができるだけである、とservices always run in a separate session.

。 :-)