2009-11-23 19 views
6

Necesito detectar cuando una nueva unidad está conectada a un sistema Windows a través de un puerto USB, puerto firewire, etc. Conozco el mensaje WM_DEVICECHANGE , pero esto requiere que se abra una ventana para poder usarlo. ¿Hay alguna manera de crear un proceso de fondo en C# que detecta cuándo se enchufan las unidades nuevas?Recibir una notificación cuando una nueva unidad está conectada a través de USB u otros medios (C#)

Información de fondo: Estoy queriendo escribir esta aplicación para eliminar un gusano de las unidades extraíbles de la empresa. El software antivirus habitual no puede eliminarlo. Tenemos un script que eliminará el gusano, pero debe ejecutarse manualmente, lo que no es suficiente para contener el brote.

Respuesta

4

Un windows service debe hacer el truco

Intenta volver a trabajar la CodeProject DriveDetector como un servicio y usted debe tener lo que necesita

+2

Lo hizo y funcionó. Para un servicio, solo tenía que asegurarme de haber creado otro hilo con un ciclo infinito que seguía llamando a Application.DoEvents(). Si no lo hace, DriveDetector se bloqueará y no recibirá los mensajes WM_DEVICECHANGE. Además, tuve que asegurarme de que la interacción con el escritorio esté habilitada para el servicio, ya que DriveDetector usa un formulario oculto para hacer su trabajo. – Phil

+0

Me alegro de esto ayudó! –

+3

Mirando hacia atrás en este proyecto, me doy cuenta de que no es una buena práctica permitir la interacción de escritorio con un servicio. Hoy en día recomiendo crear un ejecutable regular y soltarlo en la carpeta de inicio. – Phil

0

Puede crear una ventana oculta o ejecutar un servicio, ya que debería funcionar con un identificador de ventana o de estado de servicio.

Cuestiones relacionadas