2011-05-06 86 views
3

如何在运行时更改Windows Service的设置?与运行的Windows服务交互?

假设我将文件从一个目录处理到另一个目录。我希望能够声明下一个文件的输出和操作(当服务正在运行时)。如果我可以通过网站远程编辑它(SQL表或XML/TXT文件),那将是完美的。

是否有可能不重新启动服务?我可以简单地在服务“”中写入每个文件读取操作和从设置文件输出“吗?

我宁愿避免现在的Windows Communication Foundation。

+0

这是一个耻辱,你想避免WCF。这将使与服务的丰富通信几乎微不足道。 – 2011-05-06 16:11:17

回答

3

假设你还写了Windows服务,您可以发送自定义命令到服务。从控制器端,您使用ServiceController.ExecuteCommand()发送命令。在服务类上,您覆盖ServiceBase.OnCustomCommand()以处理这些命令。

但是,这只会帮助您触发某个操作。您仍然必须使用外部方法(例如共享配置文件)来传达操作的详细信息。

+0

+为简单起见。 – Phil 2011-05-06 13:49:31

2

yosh - 您提出的两个选项可以工作,该服务可以在处理文件夹之前重复读取文件settings.xml。您可以在不重新启动服务的情况下远程修改。

+0

轮询文件系统? – Phil 2011-05-06 13:39:23

1

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

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

0

你可以使用一个数据库,保存和检索信息,但除非你已经在使用一个数据库,这可能是矫枉过正,以建立一个新的表,连接到它,等

我个人会建议使用* .config并使用OpenExeConfiguration。同时,公开一些可以访问/修改这些设置的方法,然后在需要时使用它们。

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