我想知道当文件夹或文件发生变化时是否有可能触发服务。
我找到了 sc triggerinfo 但我不知道是否可以用它来做这件事。
答案1
是的,有可能,例如使用 Power Shell 脚本:
您可以使用多种策略在 PowerShell 中监视文件系统:
创建一个新的 System.IO.FileSystemWatcher 对象,并设置适当的设置:
$watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = $searchPath $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $true
.Path 是将被监视的路径,.IncludeSubdirectories 告诉 FileSystemWatcher 监视 .Path 的所有子目录
现在我们需要定义一些事件,当 $watcher 检测到文件系统更改时将触发,我将为 Changed、Created、Deleted 和 Renamed 定义一个事件:
$changed = Register-ObjectEvent $watcher "Changed" -Action { write-host "Changed: $($eventArgs.FullPath)" } $created = Register-ObjectEvent $watcher "Created" -Action { write-host "Created: $($eventArgs.FullPath)" } $deleted = Register-ObjectEvent $watcher "Deleted" -Action { write-host "Deleted: $($eventArgs.FullPath)" } $renamed = Register-ObjectEvent $watcher "Renamed" -Action { write-host "Renamed: $($eventArgs.FullPath)" }
在每个事件中,您可以定义事件触发时要发生的情况的代码。在此示例中,我只是直接输出操作类型和文件系统上更改的对象的完整路径。
差不多就是这样了。这些事件会一直存在,直到您关闭当前 PowerShell 会话或手动取消注册这些事件。您可以使用 Unregister-Event 命令取消注册这些事件:
Unregister-Event $changed.Id Unregister-Event $created.Id Unregister-Event $deleted.Id Unregister-Event $renamed.Id