5

一度に 1 つのインスタンスしか実行できない Windows フォーム アプリケーションがあります。Mutex を使用して Singleton を実装しました。アプリケーションは、コマンドラインから (パラメーターの有無にかかわらず) 起動できる必要があります。アプリケーションはスクリプトによって開始および終了されます。ユーザーはそれに対してアクションを実行できません。

したがって、アプリケーションの目的は、エンドユーザーに視覚的およびグラフィカルな情報を表示するだけの単純な「インジケーター」アプリケーションです。エンド ユーザーは何もできません。見るだけです。視覚的およびグラフィカルな外観が比較的簡単に実装できるため、Windowsフォームアプリケーションです(最上位、ボーダレスなどを取得できます)。

簡単に言えば、誰かが exit コマンドライン パラメータを使用して同じアプリケーションを実行しようとしたときに、現在実行中のアプリケーションを終了するにはどうすればよいですか?

bool quit = (args.Length > 0 && args[0] == "quit") ? true : false;
using (Mutex mutex = new Mutex(false, sExeName))
{
    if (!mutex.WaitOne(0, true)) 
    {
        if (quit)
        {
            // This is the tricky part?
            // How can I get reference to "previous" launced 
            // Windows Forms application and call it's Exit() method.
        }
    } 
    else 
    {
        if (!quit)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
4

4 に答える 4

1

これはやや手っ取り早い解決策であり、おそらく洗練したいと思うでしょう。

[STAThread]
static void Main()
{
    var me = Process.GetCurrentProcess();
    var otherMe = Process.GetProcessesByName(me.ProcessName).Where(p => p.Id != me.Id).FirstOrDefault();

    if (otherMe != null)
    {
        otherMe.Kill();
    }
    else
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

アプリのインスタンスがすでに開始されている場合、そのプロセスは強制終了されます。それ以外の場合、アプリは正常に起動します。

于 2009-03-30T16:49:25.163 に答える
0

以下の方法が一番簡単だと思います

リンクを見る

http://codenicely.blogspot.com/2010/04/creating-forms-object.html

于 2012-02-15T06:08:51.777 に答える