C# Winforms托盘应用程序和WM_关闭

C# Winforms托盘应用程序和WM_关闭,c#,.net,winforms,windows-installer,system-tray,C#,.net,Winforms,Windows Installer,System Tray,如何编写一个WinForms应用程序,该应用程序除了托盘图标外没有任何可见元素,同时允许Windows Installer在使用该文件时关闭该应用程序?据我所知,Windows安装程序向应用程序的主窗口发送WM_CLOSE消息。我假设“主窗口”由ApplicationContext的MainForm属性指示。而且,在我看来,这个机制要工作,表单必须至少显示一次 我发现了一些解决方法,比如创建一个空表单,并将其不透明度设置为0(以最小化闪烁),然后显示和隐藏,但如果将其描述为一个恶劣的黑客行为,则

如何编写一个WinForms应用程序,该应用程序除了托盘图标外没有任何可见元素,同时允许Windows Installer在使用该文件时关闭该应用程序?据我所知,Windows安装程序向应用程序的主窗口发送WM_CLOSE消息。我假设“主窗口”由ApplicationContext的MainForm属性指示。而且,在我看来,这个机制要工作,表单必须至少显示一次


我发现了一些解决方法,比如创建一个空表单,并将其不透明度设置为0(以最小化闪烁),然后显示和隐藏,但如果将其描述为一个恶劣的黑客行为,则会严重低估其丑陋性。

Windows Installer不会发送任何WM\u关闭消息。这可能有助于:

这是一个稍有不同的场景,但如果你想让Windows Installer告诉你的应用程序何时应该关闭,它可能会让你开始

在具有Restart Manager的最新操作系统版本上,将检测到托盘应用程序。在Windows XP上,它没有被检测到


在WiX世界中,有一个CloseApplication实用程序自定义操作,它会将WM_发送到应用程序窗口附近

您是否真的尝试过visible=false的表单,但它不起作用?您是否尝试调试以查看是否触发了FormClosing事件?可能的重复项您确实需要一个隐藏窗口,否则您将无法接收消息。事实上,如果您查看NotifyIcon类,它将为您创建一个隐藏的NativeWindow(如果您不提供),尽管它不会在WM_close或WM_ENDSESSION上关闭应用程序。