2009-11-23 3 views
6

Je dois détecter lorsqu'un nouveau disque est branché sur un système Windows via un port USB, un port FireWire, etc. Je suis au courant du message WM_DEVICECHANGE , mais cela nécessite une fenêtre pour être ouvert afin de l'utiliser. Y a-t-il un moyen de créer un processus en arrière-plan en C# qui détecte quand de nouveaux lecteurs sont branchés? Informations sur l'arrière-plan: Je souhaite écrire cette application pour supprimer un ver des disques amovibles de la société. Un logiciel antivirus régulier ne parvient pas à le supprimer. Nous avons un script qui va supprimer le ver, mais il doit être exécuté manuellement, ce qui n'est pas assez bon pour contenir l'épidémie.Recevoir une notification quand un nouveau disque est connecté via USB ou autre (C#)

Répondre

4

A windows service devrait faire l'affaire

Essayez retravaillant le CodeProject DriveDetector en tant que service et vous devriez avoir ce que vous avez besoin

+2

L'a fait et cela a fonctionné. Pour un service, je devais juste m'assurer que j'avais créé un autre thread avec une boucle infinie qui continuait à appeler Application.DoEvents(). Si vous ne le faites pas, le DriveDetector se bloque et ne parvient pas à recevoir les messages WM_DEVICECHANGE. En outre, j'ai dû m'assurer que l'interaction de bureau est activée pour le service, puisque DriveDetector utilise un formulaire caché pour faire son travail. – Phil

+0

Glad cela aidé! –

+3

En repensant à ce projet, je me rends compte que ce n'est pas une bonne pratique d'autoriser l'interaction de bureau avec un service. De nos jours je recommande de créer un exécutable régulier et de le déposer dans le dossier de démarrage. – Phil

0

Vous pouvez créer une fenêtre masquée ou exécuter un service comme il devrait fonctionner avec un descripteur de fenêtre ou une poignée d'état de service.

Questions connexes