0

現在、アプリにミューテックスがあり、1 つのインスタンスのみを実行できます。私の質問は、現在このコードを取得して、現在実行中のインスタンスを閉じて新しいインスタンスを開くことができるように変換するにはどうすればよいですか?

私が解決しようとしている問題: 私のアプリは引数を取り、新しいパラメーターで頻繁に再オープンする必要があります。現在、ミューテックスなしでは、無限に開くことができます。最新のパラメーター セットを持つインスタンスを 1 つだけ実行したいと考えています。

ありがとう、ケビン

いくつかのコード

bool createdMutex = true;

            Mutex mutex = new Mutex(true, "VideoViewerApp", out createdMutex);

            if (createdMutex && mutex.WaitOne())
 
            {

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new frmVideo(args[0], args[1], args[2], args[4], args[5]));
                mutex.ReleaseMutex();

            }

mutex.close();
4

1 に答える 1

2

ミューテックスはプロセス間イベント通知用ではなかったため、ミューテックスを使用して別のプロセスを閉じる方法はありません。私がお勧めするのは、この質問で推奨されているようなことをすることです。

そこにある2つの答えを、私が使用したもののようなものに結合します。

Process[] processes = Process.GetProcesses();
string thisProcess = Process.GetCurrentProcess().MainModule.FileName;
string thisProcessName = Process.GetCurrentProcess().ProcessName;
foreach (var process in processes)
{
    // Compare process name, this will weed out most processes
    if (thisProcessName.CompareTo(process.ProcessName) != 0) continue;
    // Check the file name of the processes main module
    if (thisProcess.CompareTo(process.MainModule.FileName) != 0) continue;
    if (Process.GetCurrentProcess().Id == process.Id) 
    {
        // We don't want to commit suicide
        continue;
    }

    // Tell the other instance to die
    process.CloseMainWindow();
}
于 2012-05-30T16:43:47.587 に答える