同じフォルダーから起動するアプリケーションを禁止する必要がありますが、同じアプリケーションを他のフォルダーから実行する場合は許可する必要があります。特定の場所から.NETアプリケーションのインスタンスが実行されているかどうかを確認する方法はありますか。
問題は、アプリケーションが閉じても目に見えなくなりますが、内部ジョブを終了するためメモリに残っているという問題です。
古いインスタンスがまだメモリ内で終了すると、すぐに同じフォルダからこのアプリケーションを再起動する可能性があります。
しかし、このアプリケーションが他のフォルダから実行される場合、反対側から実行する必要があります。
どのようにC#でそれを行う手がかり?
UPDATES:実際のアプリケーションで
だけでなく、サブディレクトリ内のローカルファイルにして、ローカル・データベース・ファイルにいくつかのログを書き込みます。したがって、2つのインスタンスの間に矛盾が生じる可能性は非常に高いです。
Guid appGuid = Guid.Parse("305BACEA-4074-11E1-85E1-066E4854019B");
public MainWindow()
{
InitializeComponent();
using (Mutex mutex = new Mutex(false, @"Global\" + appGuid))
{
if (!mutex.WaitOne(0, false))
{
// MessageBox.Show("Instance already running");
// Somehow here I have to get the path of the running instance.
// If the path the same as the current instance has I have do ban starting instance.
return;
}
GC.Collect();
}
を。アプリケーションパスに基づいて名前付きミューテックスを使用することができます。http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx http://stackoverflow.com/questions/819773/run-single-アプリケーション使用ミューテックスのインスタンス – Lloyd
これは、暗黙の問題に対する不器用な解決策のようなものです。同じ理由から2つのインスタンスが同じフォルダから実行できない(または同じ実行可能ファイルから拡張子で起動される)理由を説明した場合は、おそらくより良い解決策を提案することができます。 –
@Lloyd実行中のアプリケーションのパスを検出する方法は不明です。 –