创建新文件夹或文件时如何触发 Windows 服务启动

Posted

技术标签:

【中文标题】创建新文件夹或文件时如何触发 Windows 服务启动【英文标题】:How to trigger a windows service to start when new folder or file created 【发布时间】:2013-11-06 13:08:50 【问题描述】:

我有一个在启动时打印报告的 Windows 服务。我有两种情况- 1.我想在我的E:\here\文件夹中创建一个新文件夹后启动此服务。如何完成此操作? 2 当新行插入数据库表时是否可以触发服务?如何?

请提供上述查询的链接。

【问题讨论】:

【参考方案1】:

您可以使用FileSystemWatcher 来检查特定文件夹是否是在特定位置创建的。创建完成后,您可以启动 Windows 服务。

Creating FileSystemWatcher

//Define this in the clas level
FileSystemWatcher watcher = new FileSystemWatcher();

Initializing

private void InitializeWatcher()
 
  watcher.Created += new FileSystemEventHandler(NotifyChange);
  watcher.Path = @"E:\here\folder";
  watcher.EnableRaisingEvents = true;

Starting Windows Service when folder is created

private void NotifyChange(object sender, FileSystemEventArgs e)

   if (e.Name.Equals("FolerName",StringComparison.OrdinalIgnoreCase))
   
      new ServiceController("WindowsServiceName").Start();
   

【讨论】:

我是 C# 和 windows 服务的新手。我必须为上述服务创建新服务还是包含在现有服务中?尝试了很多方法,但没有奏效! @mmu 如果您已经拥有服务,那么您必须在此处提供您的服务名称 new ServiceController("WindowsServiceName").Start();。这将启动 Windows 服务。为什么要使用 Windows 服务? @AccessDenied 我在 VS2008 中创建了一个将 .rdlc 导出为 pdf 的服务。它需要在两种事件中触发 - 1. 当在 E:\here 中创建新文件夹并访问新文件夹中的文件以读取并基于它生成报告。 2.DB表中插入新行时,根据新行生成报表。 以上代码应该在创建文件夹时启动windows服务。您是否提供了正确的服务名称并尝试。确保您的服务已启动并正在运行。 有没有数据库监控类可以观察表插入启动服务?【参考方案2】:

您可以创建一个新服务,它会轮询新记录和/或新文件夹,然后相应地启动现有服务。

对于数据库,您很可能只需定期验证给定表中的行数或最新 ID,例如每 5 秒或任何您可接受的窗口。如果您的数据库是 SQL Server 数据库,您还可以使用 SqlDependency 类。在 MSDN (http://msdn.microsoft.com/en-us/library/62xk7953(v=vs.110).aspx) 和代码项目 (http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events) 上有更多相关信息。

对于文件夹,您可以使用 FileSystemWatcher 类来通知您任何更改(这里是如何做到这一点的示例:http://snipplr.com/view/54606)。

【讨论】:

以上是关于创建新文件夹或文件时如何触发 Windows 服务启动的主要内容,如果未能解决你的问题,请参考以下文章

在本地系统下运行的 Windows 服务可以在运行它的计算机上创建新文件吗?

从git中的现有分支创建新分支时如何不触发管道?

如何在使用 Vue.js 触发任何事件时创建新组件?

如何使用任务计划程序重新启动 Windows 服务

Gulps gulp.watch 不会为新文件或已删除文件触发?

在服务器上触发 mdb 查询