【发布时间】:2014-04-22 22:16:14
【问题描述】:
如何编写一个 WinForms 应用程序,该应用程序除了托盘图标外没有任何可见元素,同时如果文件正在使用,则允许 Windows Installer 关闭该应用程序?据我了解,Windows 安装程序会向应用程序的主窗口发送 WM_CLOSE 消息。我假设“主窗口”由 ApplicationContext 的 MainForm 属性指示。在我看来,要使这种机制起作用,表单必须至少显示一次。
我发现了一些解决方法,例如创建一个空表单并将其不透明度设置为 0(以最大限度地减少闪烁)然后显示和隐藏,但将其描述为令人讨厌的 hack 会严重低估它的丑陋。
【问题讨论】:
-
您是否真的尝试过使用 visible=false 的表单但它不起作用?您是否尝试调试以查看 FormClosing 事件是否被触发?
-
您确实需要一个隐藏窗口,否则您将无法收到消息。事实上,如果您查看 NotifyIcon 类,如果您不提供,它会为您创建一个隐藏的 NativeWindow,尽管它不会在 WM_CLOSE 或 WM_ENDSESSION 时关闭应用程序。
标签: c# .net winforms windows-installer system-tray