与正在运行的Windows服务交互?

3

如何在Windows服务运行时更改设置?

比如说,我要将文件从一个目录处理到另一个目录。我想能够声明下一个文件的输出和操作(在服务运行时)。如果我可以通过网站远程编辑它就更好了(可以是SQL表,也可以是XML/TXT文件)。

是否可能在不重新启动服务的情况下实现?我是否可以在服务内部简单地编写“对于每个文件,从设置文件中读取操作和输出”?

我当前希望避免使用Windows Communication Foundation。


很遗憾您想要避免使用WCF。它可以使与服务的丰富通信变得非常简单。 - Timothy Strimple
5个回答

3
假设您也编写了Windows服务,您可以向该服务发送自定义命令。从控制器端,您可以使用ServiceController.ExecuteCommand()发送命令。在服务类上,您需要重写ServiceBase.OnCustomCommand()以处理命令。
但是,这只有助于触发操作。您仍然需要使用外部方法(例如共享配置文件)来传达操作的详细信息。

2

yosh - 你提出的两个选项都可以实现,服务可以在处理文件夹之前重复读取settings.xml文件。你可以远程调整它而无需重新启动服务。


2

1

多种选择。您可以使用许多进程间通信机制,如COM、套接字、命名管道、共享内存等,提供带有“重新读取设置”命令的管理界面。

或者,您可以让服务监视配置文件的更改;在Win32 API中,相关函数是FindFirstChangeNotification();不确定是否有托管等效项,最坏情况下-使用P/Invoke。


0

你可以使用数据库来保存和检索信息,但是除非你已经在使用数据库,否则设置新表格、连接等可能会过度。

我个人建议尝试使用 *.config 并使用 OpenExeConfiguration。此外,公开一些方法以访问/修改这些设置,然后在需要该值时使用它们。

最后,你可以拥有自己的 XML 文件,其中包含这些值,并存储/检索这些值(甚至利用 XmlSerializer),在处理时可以查询它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接