0

アプリケーションが 2 回実行されるのを制限するための解決策はたくさんあります。名前付きミューテックスなどを使用してプロセス名で検索します。しかし、アプリケーションをシェルセッションに制限したい場合、これらの方法はすべて機能しません。

ユーザーは、Windows でログイン セッションとシェル以上のものを持っている可能性があります (そうですか?)。これが当てはまる場合、すべてのシェル セッションでアプリケーションの 1 つのインスタンスを実行できるようにしたいのですが、許可するのは 1 つだけです。

ミューテックス名に入れることができるシェル識別子を取得する方法はありますか?

4

4 に答える 4

5

ローカル (セッションのみ) またはグローバル (システム全体) のミューテックスを作成できます。詳細については、 http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspxを参照してください。グローバルとローカルを探します。

于 2010-02-17T23:10:58.507 に答える
0

使用するシェル識別子はユーザー名です。これは、Environment::UserNameまたはGetUserName()

于 2010-02-17T23:07:43.770 に答える
0

ログイン セッションごとに 1 つのインスタンスに制限する場合は、同じユーザー アカウントで複数のログイン セッションが同時に実行されている場合でも (サーバー/ターミナル サーバー)、ハンドルを使用して、GetShellWindow既に実行中のインスタンスがあるかどうかを確認できます。このデスクトップ。

于 2010-02-17T23:13:35.137 に答える
0

現在のプロセスのプロセス ID から WTS セッション ID に移動できます。これで必要なことができると思います。 ProcessIdToSessionId

ターミナル サービス セッションは、あるデスクトップから切断されてから別のデスクトップに接続される可能性があることに注意してください。そのため、「シェル」は実際には変更される可能性がありますが、セッション ID は同じままである必要があります。

于 2010-02-17T23:11:53.657 に答える