Я пытаюсь запустить событие, когда кто-то подключает USB-устройство. На данный момент я просто распечатаю что-то на консоли (в готовом продукте оно запустит приложение).
Этот код очень слабо адаптирован из: https://serverfault.com/questions/115496/use-wmi-to-detect-a-usb-drive-was-connected-regardless-of-whether-it-was-mounted
Есть две проблемы:
1) Мне нужно передать аргумент в область управления динамически, потому что он будет установлен на компьютеры, которые я не использую или чье имя я не знаю 2) Я получаю недопустимое исключение пространства имен при вызове w.Start ();
Есть идеи, что я делаю не так?
static ManagementEventWatcher w=null;
static void Main(string[] args)
{
AddInstUSBHandler();
for(;;);
}
public static void USBRemoved(object sneder, EventArgs e)
{
Console.WriteLine("A USB device inserted");
}
static void AddInstUSBHandler()
{
WqlEventQuery q;
ManagementScope scope = new ManagementScope("HQ\\DEV1");
scope.Options.EnablePrivileges=true;
q=new WqlEventQuery();
q.EventClassName+="_InstanceCreationEvent";
q.WithinInterval=new TimeSpan(0,0,3);
q.Condition=@"TargetInstance ISA 'Win32_USBControllerdevice'";
w=new ManagementEventWatcher(scope,q);
w.EventArrived+=new EventArrivedEventHandler(USBRemoved);
w.Start();
}