Die Erkennung von USB-Laufwerk einsetzen und entfernen mithilfe von windows service und c#
Suchen in der Möglichkeit der Herstellung einer USB-verteilten Anwendung
autostart beim einstecken eines USB-Sticks und Herunterfahren bei entfernen des Sticks
Verwenden .Net und C#.
Suche für die Anregung, wie man diesen Ansatz mit C#?
Update: Zwei mögliche Lösungen der Umsetzung dieses als Dienstleistung an.
- überschreiben von WndProc
oder
- mithilfe von WMI-Abfrage mit ManagementEventWatcher
Gute Frage, auf die service-trapping dieses Ereignis. Mein Erster Gedanke ist, die Sie haben, um Ihren Dienst als "zulassen der Interaktion mit desktop", und erstellen Sie dann ein verstecktes Fenster. Die sicherere option ist wahrscheinlich zu erstellen Sie eine windows-app, die beim starten ausgeführt wird - es kann das Fenster erstellen und dann teilen der svc
Verwandte: stackoverflow.com/questions/6003822/...
Verwandte: stackoverflow.com/questions/6003822/...
InformationsquelleAutor Kb. | 2009-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie WMI verwenden, es ist einfach und es funktioniert viel besser als die WndProc-Lösung mit Dienstleistungen.
Hier ist ein einfaches Beispiel:
Diesem Artikel zu sein scheint, immer diese Informationen in Powershell. Sollte nicht allzu schwer zu übersetzen, zu C#.
In die Ereignisprozedur
e.NewEvent.Properties["DriveName"].Value.ToString()
die Abfrage ist eindeutig für die Lautstärke verändert, das hat nichts damit zu tun, usb Hinzugefügt/entfernt. Es ist nicht einmal Arbeit für Lautstärke-änderungen, zumindest auf meinem system
InformationsquelleAutor VitalyB
Dies funktioniert gut für mich, plus Sie können herausfinden, mehr Informationen über das Gerät.
Ich Stimme mit @samuelAndThe, dies scheint die beste Herangehensweise. Wenn Sie auf der Suche für Sie auch die Veränderungen erkennen, um Festplatten und nicht nur usb-Laufwerke Sie können über den "Win32_DiskDrive' - Klasse
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
, warum haben Sie(object sender, DoWorkEventArgs e)
???(Ich verpflichtet, ein edit-Vorschlag.)Wird das laufen auf mono? Frage nur, weil vor kurzem begonnen, und wmi ist ms rein.
Alles ist genial, aber bitte entfernen Sie den Thread.Schlafen ^_^
InformationsquelleAutor Phil Minor
Hinzufügen VitalyB post.
Um ein Ereignis auszulösen, wo ALLE USB-Gerät eingesteckt wird, verwenden Sie die folgende:
Dieser löst ein Ereignis aus, wenn ein USB-Gerät angeschlossen ist. Es funktioniert sogar mit einem National Instruments DAQ, dass ich versuche, auto-detect.
Ich habe nur bearbeitet die Frage, ask @Syn! Auch, wenn Sie eine neue Frage, dann fühlen Sie sich frei, eines zu erstellen.
Das funktioniert auch aber Wie bekomme ich den Laufwerksbuchstaben des eingesteckten USB?
Hi, es funktioniert großartig für USB einsetzen! den obigen Kommentar mit "SELECT * FROM Win32_VolumeChangeEvent WO EventType = 2" ich weiß nicht warum, aber es funktioniert nicht für mich. Ich möchte die Veranstaltung laufen-sowohl zum einsetzen und entfernen. Tun Sie jetzt der Zeile Zeichenkette, die machen es passieren? oder wo kann ich sehen, all die Zeichenkette, die die wqleventQuery erhalten? Es ist nicht auf der MSDN-wqleventQuery CTOR Seite ..
InformationsquelleAutor Syn
VitalyB ' s Antwort ist nicht die Abdeckung entfernen des Geräts. Ich habe es ein bisschen geändert, um das Ereignis auszulösen, wenn beide Medien eingefügt und entfernt und auch code, um den Laufwerksbuchstaben der eingelegten Medien.
Sie haben nicht gebucht Ihrem code, das ist schwer zu sagen, aber das kann man anbringen, das Ereignis mehr als einmal.
dies ist nicht eine full code!!! so müssen Sie ersetzen mehrere Zeilen VitalyB die Antwort auf diese Frage.
Nette Verbesserungen, Ashkan, es ist schön zu wissen, wenn ein Laufwerk ausgeworfen zu werden.
Sie sind herzlich willkommen
InformationsquelleAutor Ashkan Mobayen Khiabani
Können Sie auch WMI zu erkennen insertion Veranstaltungen. Es ist ein wenig komplizierter, als überwachung für WM_CHANGEDEVICE Nachrichten, aber es nicht erforderlich, ein Fenster-handle, das kann nützlich sein, wenn Sie im hintergrund laufen als Dienst.
Eigentlich WMI ist die viel einfachere Lösung. Ich bin Entsendung es unten als eine andere Lösung.
InformationsquelleAutor John Conrad
Ein wenig Bearbeiten, auf alle oben genannten Antwort:
InformationsquelleAutor lzutao
Versuchen WM_CHANGEDEVICE Handhabung.
InformationsquelleAutor Mike Marshall
Hier ist, was wir getan haben mit C# .Net 4.0 unter einer WPF-Anwendung. Wir sind noch auf der Suche nach einer Antwort auf die Frage "wie erkennen Sie DIE Gerätetyp wurde eingefügt/entfernt", aber das ist ein start:
dies kann leicht an anderer Stelle gefunden werden, um die Liste der Geräte. Hier ist eine vollständige Lösung, die ich habe, ersten. Nur WM_DEVICECHANGE ausgelöst wird, für mich. social.msdn.microsoft.com/Forums/vstudio/en-US/...
InformationsquelleAutor Lance Cleveland
InformationsquelleAutor milind Morey