创建新文件夹或文件时如何触发 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 服务可以在运行它的计算机上创建新文件吗?