与运行Windows服务交互?

时间:2011-05-06 13:18:02

标签: c# .net windows-services

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

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

如果没有重新启动服务,它是否完全可能?我可以简单地在服务“中为每个文件读取操作和从设置文件输出”中写入内容吗?

我现在宁愿避开Windows Communication Foundation。

5 个答案:

答案 0 :(得分:3)

假设您还编写了Windows服务,则可以向服务发送自定义命令。在控制器端,使用ServiceController.ExecuteCommand()发送命令。在服务类上,重写ServiceBase.OnCustomCommand()以处理命令。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

您可以设置FileSystemWatcher来监视配置文件,以便在更新后立即重新加载配置更改。

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

您可以使用数据库并保存和检索信息,但除非您已经在使用数据库,否则设置新表,连接它等等可能会有点过分。

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

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