如何在服务中插入和删除USB磁盘驱动器事件,而又听不到某些操作系统反复访问我的硬盘驱动器?

时间:2020-03-06 14:28:21  来源:igfitidea点击:

我在Windows服务中使用以下代码,以便在插入和删除USB磁盘驱动器时收到通知:

WqlEventQuery query = new WqlEventQuery("__InstanceOperationEvent", 
    "TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType=2");
query.WithinInterval = TimeSpan.FromSeconds(1);
_deviceWatcher = new ManagementEventWatcher(query);
_deviceWatcher.EventArrived += new EventArrivedEventHandler(OnDeviceEventArrived);
_deviceWatcher.Start();

它可以在XP和Vista上运行,但是在XP上,我可以听到每秒访问一次硬盘的声音。是否有另一个WMI查询可以为我提供事件而没有声音效果?

解决方案

不确定这是否适用于情况,但我们一直在Ccode中使用RegisterDeviceNotification(无法在此处发布)来检测何时插入USB设备。我们必须导入一些本机函数,但通常可以出色地。最简单的方法是使其首先在C ++中运行,然后查看升级到C#所必须具备的内容。

在koders上有一些东西,代码搜索似乎是一个完整的Cdevice管理模块,可能会有所帮助:

http://www.koders.com/csharp/fidEF5C6B3E2F46BE9AAFC93DB75515DEFC46DB4101.aspx

尝试查找InstanceCreationEvent,这将发出创建新Win32_LogicalDisk实例的信号。现在,我们正在查询实例操作,而不是创建。我们应该知道,这些事件的查询间隔很长,因此可以更快地弹出USB USB,以便我们将其检测出来。