1

ServerFault の担当者が、ここで質問するのが適切であると判断したため、ここでこの質問を再質問しました。

1 台のコンピューターに複数のユーザーがログインしてアプリケーションを同時に使用することを防止しようとしています。つまり、同じコンピューターで同時に 2 回実行されないようにしたいということです

ライセンスの使用を厳密に設定するのには理由があります。私のアプリは、非常に専門的でニッチな市場にサービスを提供しています。したがって、各コピーには約数万の費用がかかります。このような複数のリモート ログイン技術が注目を集めたら、私はすぐに倒産してしまうでしょう。

これは、彼らが 1 つのライセンスを購入してマシンにインストールし、特定のリモート デスクトップ テクノロジを使用して複数のユーザー ログインを行うことを阻止したいからです。法執行ではなく、技術的にライセンス契約に違反することを防ぎたい.

この申請書でできることはありますか?それとも、複数の同時ログインは単に不可能ですか?

ドングル以外のソリューションを希望します。私のアプリケーションは Windows でのみ実行されます。

編集: 問題をさらに複雑にするために、異なるバージョンへの同時アクセスを許可します (私のクライアントは、1 台のマシンに同じソフトウェアの複数のバージョンをインストールし、同時にそれらを起動できます)。同時リモートログインを許可していません。

4

2 に答える 2

2

私の立場を少し明確にしましょう。少なくとも絹のようで、私はこれを別の方法で解釈しているようです。

私の理解では、複数のユーザー(または同じユーザーの複数のインスタンス)が同時にマシンにログインするのを防ごうとしています。この場合、マシンの唯一の目的はアプリケーションを実行することであると想定しますが、通常はそうではありません。

シルキーのアプローチ(システム全体のミューテックス)を使用して、複数のインスタンスが同じマシンで実行されないようにすることは許容されます。個人的には、このアプローチを採用する前に、アプリケーションの2つのインスタンスを実行している1人のユーザーがタスクを実行するための有効なユースケースがないことを確認したいと思います。

このプログラマーのペットピーブも参照してください。複数のユーザーが同じマシンを使用できないようにすることは、同じカテゴリに分類されます;)

複数バージョンの問題については、アプリケーションのすべての(メジャー?)バージョンのシステム全体のミューテックスに一意の名前を選択してください。

システム全体のMutexの基本的な例:

static class Program
{
    private static Mutex appMutex = new Mutex(false, "Global\\MyApp 1.0");

    [STAThread]
    static void Main()
    {
        if (!appMutex.WaitOne(0))
        {
            MessageBox.Show("Application is already running. Have a nice day.");
            return;
        }

        // ...
    }
}

Global\プレフィックスにより、ミューテックスは複数のターミナルサーバーセッションで共有されます。これがないと、ユーザーが同じセッションで2つのインスタンスを実行できなくなるだけです。

制限されたアカウントがそのようなミューテックスをまったく作成できない可能性があるため、制限された権限を持つアカウントでこのアプローチをテストする必要があります。

于 2009-08-20T07:31:59.193 に答える
2

同じコンピューターで 2 回実行されるのを防止しますか?

その場合、解決策は非常に簡単です。システム全体のミューテックスまたは同様のアプローチを取り出してから、それをチェックして、まだ存在しないことを確認してください。それを達成するために、ソケットなどを開くことができます。

または、それをインストールしたアカウント以外のアカウントを何らかの方法で停止し、それを実行したいですか?

于 2009-08-20T06:58:01.120 に答える