2009-11-23 17 views
6

Ich muss erkennen, wenn ein neues Laufwerk über einen USB-Port, Firewire-Port usw. an ein Windows-System angeschlossen wird. Ich bin mir der Nachricht WM_DEVICECHANGE bewusst , aber dazu muss ein Fenster geöffnet sein, um es zu benutzen. Gibt es eine Möglichkeit, einen Hintergrund Prozess in C# zu erstellen, der erkennt, wenn neue Laufwerke eingesteckt sind?Benachrichtigung erhalten, wenn ein neues Laufwerk über USB oder andere Mittel angeschlossen ist (C#)

Hintergrundinfo: Ich möchte diese App schreiben, um einen Wurm von Wechseldatenträgern der Firma zu entfernen. Regelmäßige Antivirus-Software kann es nicht entfernen. Wir haben ein Skript, das den Wurm entfernt, aber er muss manuell ausgeführt werden, was nicht gut genug ist, um den Ausbruch einzudämmen.

Antwort

4

Ein windows service sollte es tun

Versuchen Sie, die Codeproject DriveDetector als Service Nacharbeiten und Sie sollten, was Sie brauchen

+2

Hat es und es funktioniert. Für einen Dienst musste ich nur sicherstellen, dass ich einen anderen Thread mit einer Endlosschleife erstellte, der immer Application.DoEvents() aufruft. Wenn Sie dies nicht tun, wird der DriveDetector hängen bleiben und keine WM_DEVICECHANGE-Nachrichten empfangen. Außerdem musste ich sicherstellen, dass Desktop-Interaktion für den Dienst aktiviert ist, da DriveDetector ein verstecktes Formular verwendet, um seine Arbeit zu erledigen. – Phil

+0

Froh das hat geholfen! –

+3

Wenn ich auf dieses Projekt zurückblicke, merke ich, dass es nicht gut ist, Desktop-Interaktionen mit einem Dienst zuzulassen. Heutzutage empfehle ich, eine normale ausführbare Datei zu erstellen und sie im Autostart-Ordner abzulegen. – Phil

0

Sie können ein ausgeblendetes Fenster erstellen oder einen Dienst ausführen, wie es mit einem Fensterhandle oder einem Dienststatushandle funktionieren sollte.