Ejecutar servicio cuando se modifica el archivo / carpeta

1

Quiero saber si existe la posibilidad de activar un servicio cuando cambia una carpeta o un archivo.

Encontré sc triggerinfo pero no sé si puedo usarlo para eso.

Loy
fuente

Respuestas:

1

Sí, es posible de varias maneras, por ejemplo con Power Shell Script :

Existen varias estrategias que puede usar para monitorear el sistema de archivos en PowerShell:

  • Cree un nuevo objeto System.IO.FileSystemWatcher y establezca la configuración adecuada:

    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = $searchPath
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true
    

    .Path es la ruta que será monitoreada, .IncludeSubdirectories le dice a FileSystemWatcher que monitoree todos los subdirectorios de .Path

  • Ahora tenemos que definir algunos eventos que se activarán cuando $ watcher detecte un cambio en el sistema de archivos, voy a definir un evento para Cambiado, Creado, Eliminado y Renombrado:

$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)"
}
  • Dentro de cada evento, puede definir el código para lo que desea que suceda cuando se active el evento. En este ejemplo, solo estoy generando directamente el tipo de acción y la ruta completa del objeto modificado en el sistema de archivos.

  • Eso es practicamente todo. Estos eventos durarán hasta que cierre su sesión actual de PowerShell o anule el registro de los eventos manualmente. Puede cancelar el registro de los eventos con el comando Unregister-Event:

    Unregister-Event $changed.Id
    Unregister-Event $created.Id
    Unregister-Event $deleted.Id
    Unregister-Event $renamed.Id
    
tipo
fuente
1
No puedo usar PowerShell (es por trabajo). Pero estoy usando una solución similar, con python. Mi idea básica es una forma nativa usando el controlador de eventos de servicios directamente ganadores (como podemos usar para el inicio al iniciar sesión de un usuario) Pero mantengo su respuesta, será útil ^^ ¡Gracias!
Loy