同じコンピューターへの複数のログインを防ぐためのテクノロジー
-
19-09-2019 - |
質問
serverfaultの人々がここでこの質問を再aksしました これがこれを尋ねるのに適切な場所であると考えられています.
私は人々が複数のログインを1つのコンピューターにログインし、私のアプリケーションを使用しようとしています 同時に. 言い換えれば、私は同じコンピューターで2回実行されないようにしたいと考えています。.
厳格なライセンスの使用法を設定する理由があります。私のアプリは、非常に専門的で非常にニッチな市場にサービスを提供しています。したがって、各コピーは約数万の費用がかかります。このような複数のリモートログイン技術が際立っている場合、私はすぐに廃業するでしょう。
これは、1つのライセンスを購入し、マシンにインストールし、特定のリモートデスクトップテクノロジーを使用して複数のユーザーログインを行うのを止めたいからです。 彼らがライセンス契約に違反しないようにしたい 技術的に, 、法執行機関の代わりに。
とにかく、私のアプリケーションでできることはありますか?または、複数のログインが同時に不可能ですか?
非ドングルソリューションを好みます。私のアプリケーションはWindowsのみで実行されます。
編集:問題をさらに複雑にするために、同時に異なるバージョンアクセスを許可します(クライアントは、同じソフトウェアの複数のバージョンを1つのマシンにインストールし、同時にそれらを発射できます)。同時リモートログインを許可していません。
解決
私の立場を少し明確にしましょう。少なくとも絹のように、私はこれを別の方法で解釈しているようです。
私が理解していることから、あなたは複数のユーザー(または同じユーザーのより多くのインスタンス)がログインするのを防止しようとしています この機械 同時に。これで、あなたはそれを想定しています 唯一の目的 マシンのアプリケーションを実行することになりますが、通常はそうではありません。
Silkyのアプローチ(システム全体のMutex)を使用して、同じマシンで複数のインスタンスが実行されないようにすることは許容されます。個人的には、このアプローチを取得する前に、アプリケーションの2つのインスタンスを実行するためにタスクを達成するために、単一のユーザーがアプリケーションの2つのインスタンスを実行しているための有効なユースケースがないことを確認したいと思います。
これも参照してください プログラマーのペットピーブ. 。複数のユーザーが同じマシンを使用しないようにすると、同じカテゴリに分類されます;)
複数のバージョンについては、アプリケーションのすべての(メジャー?)バージョンのシステム全体のミューテックスの一意の名前を選択します。
システム全体のミューテックスを使用した基本的な例:
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\
プレフィックスにより、Mutexが複数のターミナルサーバーセッションで共有されます。それがなければ、ユーザーが同じセッションで2つのインスタンスを実行できないようにするだけです。
制限されたアカウントがそのようなミューテックスをまったく作成できない可能性があるため、権利が限られているアカウントでこのアプローチをテストする必要があります。
他のヒント
あなたはそれを防ぎたいですか ランニング 同じコンピューターで2回?
その場合、解決策は非常に簡単です。システム全体のミューテックスまたは同様のアプローチを取り出してから、それを確認して、それがまだ存在していないことを確認してください。それを達成するために、ソケットなどを開くことができます。
それとも、アカウントをインストールしたもの以外に、何らかの形で停止したいですか?