配置文件中的C#Filewatcher

时间:2018-01-08 14:52:00

标签: c# service file-watcher

我想要做的是创建一个文件监视器,监视我的服务配置文件中的任何更改。当它检测到任何更改时,服务应自动重新启动,以便可以获取更改。但是,我很难让文件观察者注意到已经进行了任何更改。

这是我的观察员代码:

private void WatchConfigurationFile(string path)
{
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = path;

    watcher.NotifyFilter = NotifyFilters.LastWrite;
    watcher.Filter = "Project.MyService.exe.config"; // name of the file I'm wanting to watch

    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.EnableRaisingEvents = true;

}

然后是OnChanged方法:

private void OnChanged(object source, FileSystemEventArgs e)
{
    Log.Info("A change in the config has been found. Stopping Service");

    ServiceController service = new ServiceController("MyService");
    try
    {
        TimeSpan timeout = TimeSpan.FromMilliseconds(20);

        service.Stop();
        service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
    }
    catch(Exception ex)
    {
        // ...
        Log.Error("Error restarting service: " + ex.Message);
    }
}

最后,我通过以下呼叫呼叫以上所有内容:

public void Run()
{
    WatchConfigurationFile("..\\InstallFolder\\MyService\\");
}

Run方法已在我的服务中使用。我让服务在一个计时器上运行,在每次倒计时结束时调用Run。此方法已经有其他方法调用,所以我知道Run方法正在运行。

我做错了什么?我有一种有趣的感觉,我的路径可能不正确,因为配置与服务本身位于同一位置。但如果其他人能够阐明这一点,我们将不胜感激。

0 个答案:

没有答案