Получать уведомления при подключении нового диска через USB или другим способом (C#)

Мне нужно определить, когда новый диск подключен к системе Windows через порт USB, порт FireWire и т. д. Мне известно о WM_DEVICECHANGE, но для его использования требуется открытое окно. Есть ли способ создать фоновый процесс на C#, который определяет подключение новых дисков?

Справочная информация: я хочу написать это приложение для удаления червя со съемных дисков компании. Обычное антивирусное ПО не может его удалить. У нас есть сценарий, который удалит червя, но его нужно запускать вручную, что недостаточно для сдерживания вспышки.


person Phil    schedule 23.11.2009    source источник


Ответы (4)


служба Windows должна помочь.

Попробуйте переработать CodeProject DriveDetector как службу, и вы получите то, что вам нужно.

person Chris Ballance    schedule 23.11.2009
comment
Сделал и заработало. Для службы мне просто нужно было убедиться, что я создал еще один поток с бесконечным циклом, который продолжал вызывать Application.DoEvents(). Если вы этого не сделаете, DriveDetector зависнет и не сможет получать сообщения WM_DEVICECHANGE. Кроме того, мне нужно было убедиться, что для службы включено взаимодействие с рабочим столом, поскольку DriveDetector использует для своей работы скрытую форму. - person Phil; 24.11.2009
comment
Оглядываясь назад на этот проект, я понимаю, что не рекомендуется разрешать взаимодействие рабочего стола со службой. В настоящее время я рекомендую создать обычный исполняемый файл и поместить его в папку автозагрузки. - person Phil; 02.10.2010

Вам нужно будет подписаться на RegisterDeviceNotification и привязать его к дескриптору состояния службы. См. также http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/9ae4478a-1133-44ba-8a1c-3e4be3856e37.

Я не совсем уверен, как это реализовать, было давно.

person Jan Jongboom    schedule 23.11.2009

В этом сообщении блога показано, как обрабатывать системные события, https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/howdoi/?p=135 возможно, вы можете использовать его для события, которое вы хочу справиться

person Ivo    schedule 23.11.2009
comment
Системных событий, связанных со сменой устройства, к сожалению, не видел. - person Phil; 25.11.2009

Вы можете создать скрытое окно или запустить службу, поскольку она должна работать с дескриптором окна или дескриптором состояния службы.

person Guillaume    schedule 23.11.2009