2

重複の可能性:
単一インスタンスアプリケーションを作成する正しい方法は何ですか?
マシンアプリケーションごとに単一のインスタンスを実装するにはどうすればよいですか?

1つのパラメーターを引数として取るWinformアプリがあります。

static class Program
{

    [STAThread]
    static void Main(string[] args)
    {           
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Gauges(args));
    }
}

このプログラムは、別のアプリケーションによって1日に数回実行されます。

プログラムがすでに実行されているかどうかを確認することはできますか?実行されている場合は、実行中のインスタンスを最新のパラメーターで使用できますか?

4

2 に答える 2

2

ミューテックスを使用して、実行中のアプリケーションの複数のコピーを停止できます。ここにミューテックスの使用に関する非常に優れた記事があります:http ://sanity-free.org/143/csharp_dotnet_single_instance_application.html

すでに実行中のプロセスにパラメーターを渡すことに関しては、実行中のインスタンスに新しいパラメーターを通知するために、何らかの形式のIPCを実装する必要があります。ソケット、名前付きパイプなど、さまざまなソリューションを使用できます。

于 2013-01-28T10:38:08.337 に答える
2

私のプログラムがすでに実行されているかどうかを確認することは可能ですか?

アプリケーション内でMutexを使用できます

bool alreadyPresent  =false;
using (Mutex mutex = new Mutex(true, "YourAppName", out alreadyPresent  ))
{
    if(alreadyPresent ) {
       //APP ALREADY PRESENT 
    }
}

MutexOSアーティファクトであるため、アプリケーション(実行可能)のさまざまなインスタンスが同じオブジェクトにアクセスできません。

実行中のインスタンスを最新のパラメーターで使用できますか?

アプリをどのように管理するかによって異なります。何らかのIPCメカニズムを使用して、必要なパラメーターをすでに実行中のプロセスに伝達できます。

于 2013-01-28T10:41:02.947 に答える