我熟悉编写 Windows 服务应用程序。我已经使用各种方法编写了一些 - 第三方库、.NET 提供的方法等。不过,我以前的服务应用程序都没有任何方式与它们交互。
我现在需要编写一个 Windows 服务应用程序,但它需要一个任务托盘图标,当您单击它时可能会弹出一个“管理 GUI”。
执行此操作的合适模式是什么?
服务是否应该是它自己的应用程序,但能够通过外部方式与之交互——也许是它轮询配置更改的数据库?它应该使用 IPC 还是什么?
有没有办法使 Windows 服务也具有 GUI,以便管理 GUI 和服务都只是同一个应用程序?
Is there a way to make a windows service also have a GUI
没有;根据定义,Windows 服务没有(交互式)桌面。任何指向让它发挥作用的东西充其量都是非常肮脏的黑客攻击。
Is there a way to make a windows service also have a GUI so that the management GUI and the service are all just the same application?
您可以通过将常用的东西放入库或其他东西来共享代码。您甚至可以共享整个代码库并使用 --service
命令行参数(例如)和不带(或带 --gui
)参数的 GUI 部分运行应用程序( s).
interacted with through external means - perhaps a database that it polls for config changes?
这是一种可能性,但不是最快或最有效的
Should it use IPC or something?
我会选择那个。你可以使用任何你想要的; REST API、WCF、TCP/UDP 连接、套接字、(命名)管道、内存映射 I/O...无论您选择什么,它都将是某种 IPC。您甚至可以发送 custom commands为您提供服务,但这非常非常有限。
如果由我决定,我会使用 WCF 来实现它。但我有点偏见,我做了很多 WCF 的东西。