この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 19013|答える: 0

[出典] C#はアプリケーションインスタンスの正しく書くことだけを許可します

[リンクをコピー]
掲載地 2016/12/10 14:35:34 | | |
C#プログラムは正しいコードを実行できるインスタンスを1つだけ許可します
http://www.itsvse.com/thread-3391-1-1.html
(出典:建築家)


以下のコードも間違っています!! 上記のコードは正しいです!!


時にはアプリケーションのインスタンスを1つだけ実行させる必要があり、プロセスが始まったときにインスタンスが実行中だと判明すると自動的に実行を停止します。 通常、Main関数でMutexミューテックスを実装します。通常は次のように書かれます。

答えを探すとき、私たちはしばしば急いで行き来し、Mutexの特徴や注意点を無視してしまいます。 簡単なテストの後、OK、使ってみて。 ここで重要な前提条件を見落としています。ミューテックスの命名規則。 上記の書き方は、単一ユーザーでも問題なく動作します。 マルチユーザーでは、各ユーザーが1つのインスタンスを起動できるため、1つのインスタンスを保証することはできません。

ターミナルサーバーで使う必要があり、インスタンスを1つだけ許可する場合は、以下の方法を使ってください。


以下がMSDNの説明です:


端末サービスを実行するサーバーでは、名前付きのシステムミューテックスには2つの可視性レベルがあります。 名前が接頭辞「Global\」で始まる場合、ミューテックスはすべてのターミナルサーバーセッションで確認できます。 名前が「Local\」で始まる場合、ミューテックスは作成したターミナルサーバーセッションでのみ表示されます。 この場合、同じサーバー上の他のターミナルサーバーセッションは、同じ名前の別々のミューテックスを持つことができます。 プレフィックスを指定せずに名前付きミューテックスを作成すると、「Local\」というプレフィックスが使われます。 ターミナルサーバーセッションでは、異なる名前の接頭辞を持つ2つのミューテックスが独立したミューテックスであり、その2つのミューテックスはターミナルサーバーセッション内のすべてのプロセスに見えます。 つまり、プレフィックス名「Global」と「Local」は、プロセスではなく、端末サーバーセッションに対するミューテックス名の範囲を表します。






先の:COMの相互運用性のためのコンポーネントレジスタはグレーアウトされています
次に:C#プログラムは正しいコードを実行できるインスタンスを1つだけ許可します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com