C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■93081 / )  Re[3]: 「ユーザーの切り替え」を知りたい
□投稿者/ とっちゃん (644回)-(2019/11/19(Tue) 12:10:55)
No93071 (りんく さん) に返信
> WM_WTSSESSION_CHANGEを受信した際、
> wParam にある詳細については判定していないのですが
> @「ユーザAでログアウト、再度ユーザAでログイン」のときと
> A「ユーザAでログアウト、ユーザBでログイン」のときと wParam の値が変わりませんでした。
> Aのときにしか「WTS_CONSOLE_DISCONNECT」は発生しないと思ったのですが
> @でもAでも発生していました。
> ※参考にしたページのURLが載せられないようです。。
>
> wParamは下記の値が順番に入ってきました。
> WTS_CONSOLE_DISCONNECT=2
> WTS_SESSION_LOCK=7
> WTS_CONSOLE_CONNECT=1
> WTS_SESSION_UNLOCK=8

どのセッションの状態が変わったかは、lParam で判断します。
wParam は、何が変わったかという情報です。
WTS_CONSOLE_XXXX なら、コンソールが接続された・接続解除されたですし、
WTS_SESSION_XXXX なら、セッションがXXXX されたという通知です。

具体的にどのコンソール(=セッション)かは、lParam で判断します。


> Aのときにしか「WTS_CONSOLE_DISCONNECT」は発生しないと思ったのですが

DISCONNECT が呼ばれるのは、Aのコンソールが切り離されたタイミングすなわち、別のアカウントでログオン処理を開始したタイミングです。
あとは、もしかしたら画面ロックでも呼ばれるかもしれません。

さて本題。

現状見えている範囲から類推される問題点は以下のようなものでしょうか?

1. 「すべてのユーザー」でインストールしたアプリがある。
2. すべてのユーザーで共通利用しているDBがある。
3. DBへのアクセス(ログイン)は複数同時で行うことはできず、誰か一人だけが行える。
4. 現在のユーザーでログオンしたまま、別のユーザーでログオンしてアプリを起動するとDBへのアクセスが複数で行われてしまう。

上記で認識があっているとしたら、WTS_CONSOLE_DISCONNECT を受け取ったときに、
そのユーザーはDBアクセスをログオフするとすればいいと思います。
そのあと、WTS_CONSOLE_CONNECT が来たら再びDBアクセスできるようにログオンすれば解決すると思います。

返信 編集キー/


管理者用

- Child Tree -