如何在服务中插入和删除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,以便我们将其检测出来。