与正在运行的Windows服务交互

本文关键字:Windows 服务 交互 运行 | 更新日期: 2023-09-27 17:55:01

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

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

是否可以不重启服务?我可以简单地在服务内部写"为每个文件读取操作和输出设置文件"吗?

我现在宁愿避免使用Windows Communication Foundation

与正在运行的Windows服务交互

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

然而,

这只能帮助您触发一个操作。你仍然需要使用外部方法(例如共享配置文件)来传达动作的细节。

ysh—您提出的两个选项可以工作,服务可以在处理文件夹之前重复读取文件settings.xml。

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

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

选项很多。你可以使用许多进程间通信机制——COM、套接字、命名管道、共享内存——来提供一个带有"重新读取你的设置"命令的管理界面。

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

您可以使用数据库并保存和检索信息,但是,除非您已经在使用数据库,否则设置新表、连接它等操作可能有些多余。

我个人建议玩*。配置和使用openexecconfiguration。此外,公开两个方法,可以访问/修改这些设置,然后在需要时使用它们。

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