4

システム トレイ (通知領域) で実行される非常に基本的なアプリケーションがあります。メソッドは次のMainようになります。

using (NotifyIcon notifyIcon = new NotifyIcon())
{
    notifyIcon.ContextMenuStrip = new ContextMenuStrip();
    notifyIcon.ContextMenuStrip.Items.Add(new ToolStripMenuItem(
        "Exit", 
        null, 
        delegate { App.Exit(); }
        )
    );

    notifyIcon.Icon = Properties.Resources.MyIcon;
    notifyIcon.Visible = true;

    Application.Run();
}

これまでのところ、これは問題なく動作します (コンテキスト メニューの [終了] オプションを使用すると、アプリケーションは適切に終了します。ただし、ソフトウェアをアンインストールするときにアプリケーションを終了する必要があります。現在taskkill、WiX インストーラーから使用してこれを実行しています (多分もっと良い方法がありますか?). 問題はtaskkill /im myapp.exe、通知領域のアイコンが消えるが、プロセスはまだ実行されていることです. で強制的に閉じるとtaskkill /f /im myapp.exe、プロセスは終了しますが、アイコンは残ります (マウスをホバーするまで)アイコンを削除して別のプロセスからプロセスを終了する方法はありますか?

4

2 に答える 2

0

私は別のアプローチを取ることにしました。シャットダウンすることを示すコマンド ライン パラメーターを追加しました。このスイッチは、で定義されたカスタム メッセージを使用して Win32 API を呼び出しますSendMessage(奇妙なことPostMessageに機能しませんでした) RegisterWindowMessage。WiX インストーラーは、このコマンド ライン パラメーターを使用してプロセスを実行し、適切にシャットダウンされます。なんて深刻な痛み…

于 2013-04-17T18:17:06.887 に答える