17

これを達成するために、StackOverflow で少なくとも 3 つの異なるメソッドを見てきました。

  1. MUTEX の使用:この SO の質問に対する受け入れられた回答

  2. Microsoft.VisualBasic ライブラリの WindowsFormsApplicationBase の使用:この SO の質問に対する投票数が 2 番目に多い回答

  3. Process.GetProcessNames を使用して、アプリケーションが実行されているかどうかを確認する: Method here was posted as answer to this SO question

これを行う方法は他にもあると確信しています。

これらのいずれかが優先されるかどうか、および「間違った」ものを選択した場合の結果がどうなるかを単純に考えています。

4

3 に答える 3

17

確信が持てない場合は、.NET フレームワークに含まれている実装を常に優先してください。このような実装が何十万人ものプログラマーによってテストされ、セキュリティと使いやすさが慎重にレビューされ、今後数年間維持されることを期待できます。

ミューテックスのアプローチは、簡単に始めることができます。ただし、かなり深刻なセキュリティ上の問題があります。サービス拒否攻撃は非常に簡単に実行できます。ミューテックスの名前を秘密にしておくことはできず、誰でも簡単に同じ名前のミューテックスを作成して、プログラムが起動しないようにすることができます。

同じ理由で、プロセス名のアプローチには深刻な欠陥があります。プロセス名が一意であるという保証はありません。簡単に悪用できるだけでなく、偶発的に簡単にトリガーされます。

WindowsFormsApplicationBase には、C# プログラマーの目には画像の問題があります。彼らは名前空間名で窒息し、プログラムが何らかの形で vb-isms に感染すると想定します。それはナンセンスです。これは、任意の言語で使用できる単なる .NET クラスです。

于 2012-12-31T19:16:37.200 に答える
5

このチェックボックスをオンにすることについて誰も言及しなかったのはなぜですか?

ここに画像の説明を入力

于 2012-12-31T19:56:21.030 に答える
0

それは本当に好みの問題ですがMutex、VisualBasic ライブラリへの依存を必要としないという理由だけで、私はこのアプローチを好みProcess.GetProcessNamesます。そうかもしれないと思う)

于 2012-12-31T19:13:35.790 に答える