vorweg: ich bin mir nicht sicher, ob mein Post hier im richtigen Teil des Forums gelandet ist! Falls nicht: sorry und bitte ggf. verschieben! Danke.
Ich möchte in einer WindowsForms-App alle USB-Geräte in einer Collection auflisten. Dabei habe ich mich an diesem Beispiel orientiert. Meinen Code habe ich abgeändert, so dass er wie folgt ausschaut:
private void frmMainDisplay_Load(object sender, EventArgs e)
{
List<string> devices = new List<string>();
ManagementObjectCollection devicesCollection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBControllerDevice"))
devicesCollection = searcher.Get();
foreach (var device in devicesCollection)
{
devices.Add((string)device.GetPropertyValue("ProductName"));
}
devicesCollection.Dispose();
}
Da ich an den Devices und nicht an den Hubs interessiert bin, suche ich in Win32_USBControllerDevices.
Wenn ich meinen Code ausführe, stürzt er in der foreach-Schleife ab. Ich erhalte folgende Fehlermeldung:
Fehler |
System.Management.ManagementException: "nicht gefunden" Diese Ausnahme wurde ursprünglich von dieser Aufrufliste ausgelöst: [Externer Code] VGACaptureDevice.frmMainDisplay.frmMainDisplay_Load(object, System.EventArgs) in Form1.cs [Externer Code] |
Beim Debugging habe ich festgestellt, dass im Ausgagbefenster folgendes angezeigt wird:
Zitat |
Ausnahme ausgelöst: "System.Management.ManagementException" in System.Management.dll Ein Ausnahmefehler des Typs "System.Management.ManagementException" ist in System.Management.dll aufgetreten. Nicht gefunden |
Durch setzen eines Break-Points habe ich außerdem festgestellt, dass devicesCollection vor Ausführen der foreach-Schleife bei den Properties unter Count = 35 aufweist (ich nehme an, das sind sämtliche USB-devices plus hubs plus BlueTooth plus ?), ich diese 35 Items aber nicht näher Anschauen kann: unter Ergebnisansicht steht: "Fehler = Die Funktionsauswertung wurde deaktiviert, weil bei einer vorhergehenden Funktionsauswertung das Timeout überschritten wurde. Sie müssen die Ausführung fortsetzen, um die Funktionsauswertung wieder zu aktivieren." Tue ich das, stürzt die App allerdings wie zuvor beschrieben ab.
Um wirklich sämtliche Fehlerquellen auszuschließen, hier mal mein Vorgehen bis zu diesem Punkt: ich musste nämlich feststellen, dass es nicht genügt den Namespace System.Management per using hinzuzufügen; man muss auch händisch einen Verweis setzen. Dies habe ich getan mit
- Rechtsklick auf mein Projekt --> Hinzufügen --> Verweis --> Häkchen gesetzt bei System.Management und System.Management.Instrumentation
- OK geklickt.
Eine Google-Suche nach dem Fehler brachte zu Tage, dass möglicherweise das WMI-Repository von Windows beschädigt sein könnte. Ich habe dazu in der Powershell winmgmt /verifyrepository ausgeführt. "Leider" war das Ergebnis "Das Repository ist konsistent".
Damit gehen mir leider derzeit die Ideen aus - mein Code besteht lediglich aus den paar Zeilen weiter oben und die Fehlermeldung lässt mich leider auch im Regen stehen. Hat jemand eine Idee, was da falsch laufen könnte?
Vielen Dank.
Gruß
vorph