2

機器を制御するためにPC上でローカルプロセスとして実行されるEquipCtrl.exeと呼ばれるC#で記述されたアプリケーションがあるとしましょう。

明らかに、各PCで実行するEquipctrlのインスタンスを1つだけにしたいです。PCごとに制御する機器が2つある場合は、PCごとに2つのインスタンスに制限します。

私がした方法は、1。プロセス名のいずれかでした。プロセスにEqCtrlという名前を付けます。プロセスの起動時に、「EqCtrl」という名前のプロセスの数がカウントされます。2.実行名。起動時に、実行名がEquipCtrl.exeのプロセスの数を数えます。3.レジストリレコード。4.SQLServerデータベースレコード。

私にとって、プロセス名または実行名の検出は最も単純であり、ほとんどの場合(すべてではないにしても)実行します。ただし、名前が衝突する可能性があります。さらに実行パスを調べても、実行ファイルを別のフォルダにコピーすることで制限を回避できる可能性があります。

.NETで実行制限を実行するための最良の方法は何ですか?なんで?レジストリレコードは最良の方法ですか?

4

4 に答える 4

7

システム全体のセマフォを試してください:http: //msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx

于 2010-11-11T22:04:00.197 に答える
1

スコットハンゼルマンのブログには、これに関するすばらしい投稿があります...

http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx

于 2010-11-11T22:18:15.853 に答える
0

うーん..アプリケーションのインスタンスを1つだけ許可したい場合は、名前付きミューテックスを使用します

それはあなたが望むシナリオを正確に可能にするわけではありません。

もう1つのポイントは、衝突を回避するために、実行可能ファイルの名前とディレクトリに加えて、実行可能ファイルのMD5ハッシュを使用することです。

于 2010-11-11T22:07:11.240 に答える
0

これは、名前付きミューテックス\セマフォをカウントすることで実行できます。また、作成するミューテックス/セマフォプレフィックスがGLOBAL\およびLOCAL\で始まることを確認してください。そうしないと、リモートデスクトップ接続がこれらの名前付きミューテックスを読み取らず、カウントが失われます。

http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx

于 2010-11-12T08:04:05.047 に答える