Visual Basic.NET - EVENTO DELETE FILESYSTEMWATCHER

 
Vista:
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por el_mamer (5 intervenciones) el 11/06/2014 08:46:01
Hola,

estoy trabajando con los eventos created, changed, renamed y deleted de filesystemwatcher y con los 3 primeros no estoy teniendo ningún problema para obtener información del proceso, pero del último sí, y creo que es porque como el archivo en cuestión se ha borrado, ya no es posible obtener información sobre él <de hecho siempre me salta la excepción del try-catch cuando trato de obtener info del e.FullPath de mi funcion ObtenerInformacion()>

¿existiría alguna forma de obtener información del proceso deleted, justo antes de que se produzca? algo así como: dame la información antes de morir.

gracias.

un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por Pico (167 intervenciones) el 11/06/2014 09:26:46
Pero e.FullPath sí da un valor correcto. ChangeType será igual a Deleted, el archivo estará ya borrado, pero el path te lo pasa correctamente.

El error es otro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por el_mamer (5 intervenciones) el 11/06/2014 09:40:14
así es.
yo pienso que mi función
ObtenerInformacionDelProceso(e.FullPath)
coge la excepción del try-catch porque ya no me puede dar información del proceso (borrado).
en los otros manejadores, como el proceso existe porque se crea, actualiza o renombra, sí me da información de ese proceso, pero en delete no por esta razón creo.
la cuestión es: ¿se puede hacer algo al respecto? Necesito obtener información sobre ese proceso antes de que muera y desaparezca
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por Pico (167 intervenciones) el 11/06/2014 09:53:59
¿Proceso? FileSystemWatcher controla el sistema de archivos y lanza eventos cuando algo cambia, no sé por qué hablas de procesos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por el_mamer (5 intervenciones) el 11/06/2014 09:59:10
cuando digo proceso, me refiero a, por ejemplo:
ObtenerInformacionDelProceso(C:\nominas.doc) [e.FullPath = C:\nominas.doc]
o
ObtenerInformacionDelProceso(C:\bajas.pdf)

es decir, obtener información de esa ejecución antes de que muera: .doc, .xls, .pdf, .mdb, .jpg, etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por Pico (167 intervenciones) el 11/06/2014 10:35:02
A ver:

1 - FileSystemWatcher controla el sistema de archivos.
2 - Cuando se borra un archivo llama al evento Deleted.
3 - Cuando lo llama, el archivo ya está borrado.
4 - e.FullPath tiene el path del archivo borrado.
5 - No hay un evento de "llamar cuando se va a borrar pero aún no se ha borrado".

No sé qué información quieres coger del archivo que ya está borrado, pero lo que hay es eso. Creo que el problema que tienes es otro, como ya he dicho antes. Pero....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por el_mamer (5 intervenciones) el 11/06/2014 10:39:46
la información que quiero recabar antes de que el fichero (proceso) desaparezca es quién (qué usuario local o del dominio) ha borrado el archivo y momento exacto del delete.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por Pico (167 intervenciones) el 11/06/2014 11:16:30
Me da que para eso no va a valerte el filesystemwatcher.

Puede ser, y digo puede, que te valga el ReadDirectoryChangesW. Es una función de windows, y entre sus parámetros está lpOverlapped, y si le pasas una estructura OVERLAPPED válida, la función se ejecuta sincrónizada con lo que controla. O sea, si le pones que controle el borrado de un archivo en un directorio con un OVERLAPPED válido, no vuelve hasta que se produzca un borrado, y puede ser que aún no esté borrado el archivo.

Lo que sí es seguro que funciona es lo mismo que hice yo ahí http://www.foro.lospillaos.es/waveout-select-seleccionar-salida-de-audio-o-de-que-va-eso-del-hooking-vt14298.html pero con ZWDeleteFile en vez de ZwOpenFile. Se llama a una función tuya ANTES del borrado, y ya haces lo que quieras.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por Pico (167 intervenciones) el 11/06/2014 11:23:55
Se me olvidaba que otra cosa que puedes hacer es auditar un directorio, de manera que se guarde un registro de todo lo que se haga en él, tal que http://www.aprendeinformaticaconmigo.com/windows-server-2008-configurar-permisos-y-auditoria/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por el_mamer (5 intervenciones) el 11/06/2014 12:15:40
guauuuuu.
muchas gracias por toda esta información. Quizás es demasiado nivel para mí, no llego a tantos conocimientos...
Lo que sé seguro es que no quiero activar la auditoría de windows. Quiero lograr mi propósito (que he conseguido con los otros 3 tipos de eventos) sin pasar por los horrores de la auditoría de windows.

los otros dos ejemplos que me comentas (uno de ellos dices que seguro funcionará), ¿crees que podrías escribirme unas líneas de cómo ponerlo en funcionamiento? Y/a te digo que lo veo demasiado avanzado para mí (lo siento).

parto de la base de: "cuando se borre un archivo de X directorio conocido (.doc, .xls, .pdf, .mdb, .pdf...), obtener quién lo borró y cuándo". Con tus ideas, o al menos la que dices que funcionará seguro, ¿crees que podrías facilitarme esas líneas de código???

Muchas gracias.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por Pico (167 intervenciones) el 11/06/2014 14:01:42
Pues no, he estado probando el ReadDirectoryChangesW. Resulta que asíncrono no avisa antes de borrar el archivo, y síncrono, o he hecho algo mal, o te deja el disco que no hay dios de programa que pueda acceder a él, con lo que se me ha quedado el ordenador hecho un gurruño en un momento. Además he visto por ahí que el FileSystemWatcher usa esa función.

La otra solución es un hook a la función DeleteFile, ya sea en el explorer o en un driver. En el explorer sería algo como http://www.codeproject.com/Questions/378975/IAT-Hooking-FindFirstFile-in-Explorer-exe , pero con DeleteFile en vez de FindNextFileW. O sea, una dll que cargue el explorer (se puede hacer fácilmete a través del registro) y cada vez que llame a DeleteFile llama una función tuya, haces lo que sea, y llamas a tú DeleteFile del windows para que borre el archivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EVENTO DELETE FILESYSTEMWATCHER

Publicado por Jose (2 intervenciones) el 30/06/2014 10:34:54
Interesante toda la discusión.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar