3

C# で .NET を使用しています。

同じ実行可能ファイルの 2 つのインスタンスが同時に実行されるのを防ぎたいのですが、同じプロセスが別のフォルダーから実行されるのを防ぎたくありません。

たとえば、次の 2 つの異なる場所にある実行可能ファイルがあります。

  • C:\MyProject\Master\Program.exe

  • C:\MyProject\Slave\Program.exe

これらは同じ .exe ファイルですが、2 つの異なる場所にあります。

Master フォルダーから実行される Program.exe の 1 つのインスタンスと、Slave フォルダーから実行される 1 つのインスタンスを許可したいのですが、いずれか 2 つを許可したくありません。

同じ名前 (Process.GetProcessesByName) を持つプロセスの数を確認してこれを実行しようとしましたが、2 つを区別することはできません。

私が見つけた最も近い方法は、プロセスからモジュールを取得することです。

リストの最初のものは、exe の ProcessModule です。しかし、これが常にリストの最初のものになるかどうかはわかりません。それに対する保証はありますか、それとも説明された問題に対するより良い解決策はありますか?

4

2 に答える 2

1

アセンブリ名に依存する代わりに、グローバルミューテックスを使用します。たとえば、別のアプリケーションが同じファイル名を使用している可能性があります。

たとえば、この回答を参照してください: Mutexを使用してアプリケーションの単一インスタンスを実行する

于 2012-05-07T10:54:56.657 に答える
0

これを行う1つの方法は、おそらく別のサービスで、次のようなことをすることです:

Process[] processes = Process.GetProcessesByName("Program");

プログラムのすべてのアクティブなプロセスが表示されます。

次に、これからディレクトリを取得できます。

string fullPath = process.MainModule.FileName;

すべてのインスタンスのディレクトリを比較し、2 つに同じフォルダーがある場合は、そのうちの 1 つを閉じます。

于 2012-05-07T10:17:12.350 に答える