C# 如何在服务项目中获取插入的USB驱动器盘符?

C# 如何在服务项目中获取插入的USB驱动器盘符?,c#,.net,service,usb,C#,.net,Service,Usb,我一直使用重写WndProc(ref Message m)的方法来获取插入/删除驱动器的事件,并创建自己的eventarg来返回驱动器号。这很好地工作,但现在我正忙于开发一个服务项目,显然不能使用上述方法 我现在正在使用WMI: //insert WqlEventQuery creationQuery = new WqlEventQuery(); creationQuery.EventClassName = "__InstanceCreationEvent"; c

我一直使用重写WndProc(ref Message m)的方法来获取插入/删除驱动器的事件,并创建自己的eventarg来返回驱动器号。这很好地工作,但现在我正忙于开发一个服务项目,显然不能使用上述方法

我现在正在使用WMI:

    //insert
    WqlEventQuery creationQuery = new WqlEventQuery();
    creationQuery.EventClassName = "__InstanceCreationEvent";
    creationQuery.WithinInterval = new TimeSpan(0, 0, 2);
    creationQuery.Condition = @"TargetInstance ISA 'Win32_DiskDriveToDiskPartition'";
    ManagementEventWatcher creationWatcher = new ManagementEventWatcher(creationQuery);

    creationWatcher.EventArrived += new EventArrivedEventHandler(USBEventArrived_Creation);
    creationWatcher.Start();
这将正确地让事件在插入USB闪存时触发。现在我需要的帮助是如何从活动中获取驱动器号(如E:)

以下是我迄今为止在我的活动中所做的:

    internal void USBEventArrived_Creation(object sender, EventArrivedEventArgs e)
    {
        EventLog.WriteEntry("USB PLUGGED IN!");
        ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
        foreach (var property in instance.Properties)
        {
            EventLog.WriteEntry(property.Name + " = " + property.Value);

        }
    }

我无法从“属性”获取驱动器号。有办法得到驱动器号吗?或者我需要从一个完全不同的角度来看待这个问题吗?

在经历了很多挫折之后,我成功了

解决方案是,而不是使用:

creationQuery.Condition = @"TargetInstance ISA 'Win32_DiskDriveToDiskPartition'";
将其更改为:

creationQuery.Condition = @"TargetInstance ISA 'Win32_LogicalDisk'";
现在在event函数中,
EventArrivedEventArgs e
中的属性将包括驱动器号

    internal void USBEventArrived_Creation(object sender, EventArrivedEventArgs e)
    {
        Console.WriteLine("USB PLUGGED IN!");
        ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
        foreach (var property in instance.Properties)
        {

            if (property.Name == "Name")
                Console.WriteLine(property.Name + " = " + property.Value);
        }
    }
property.Value包含property.Name=“Name”时的驱动器号