0

我正在尝试使用以下 c# 代码来检测 USB 大容量存储设备的附加/删除事件。我正在使用 Win32_VolumeChangeEvent。

  
// Initialize an event watcher and subscribe to events that match this query            
var _watcher = new ManagementEventWatcher("select * from Win32_VolumeChangeEvent");
_watcher.EventArrived += OnDeviceChanged;
_watcher.Start();

void OnDeviceChanged(object sender, EventArrivedEventArgs args)
{
    Console.WriteLine(args.NewEvent.GetText(TextFormat.Mof));
}

问题是这在 Vista 上运行良好,但在 XP 上根本无法运行(没有收到任何事件)。微软文档说这应该可以工作(http://msdn.microsoft.com/en-us/library/aa394516(VS.85).aspx)。我用谷歌搜索了一段时间,发现其他也有这个问题。但我也发现了几篇文章声称这种查询(主要在 vbscript 中)适用于 XP。但是我无法从微软那里找到一些关于这个问题的官方信息,而且我不敢相信微软已经忽略了三个服务包的这个问题。

所以我的问题是:是否有人在 XP 上成功使用了 Win32_VolumeChangeEvent,或者可以提供链接/解释为什么它不应该在 XP 上工作?

4

2 回答 2

2

正如您在自己的链接中看到的那样,支持的最低客户端版本Win32_VolumeChangeEvent是 Windows Vista。无论如何,正如这里所建议的,您可以在范围内的间隔内执行查询root\\CIMV2。这是我的代码中的一个示例:

WqlEventQuery query;
ManagementScope scope;
ManagementEventWatcher watcher;
public void DoWork()
{
    // Check if OS Version is earlier than Windows Vista
    if (USBHandlerWorker.OSVersion() <= 6)
    {
        scope = new ManagementScope("root\\CIMV2");
        scope.Options.EnablePrivileges = true;

        query = new WqlEventQuery();
        query.EventClassName = "__InstanceCreationEvent";
        query.WithinInterval = new TimeSpan(0, 0, 1);
        query.Condition = @"TargetInstance ISA 'Win32_USBControllerdevice'";

        watcher = new ManagementEventWatcher(scope, query);
        watcher.EventArrived += watcher_EventArrived;
        watcher.Start();  
    }
    else
    {
        watcher = new ManagementEventWatcher();
        // The event types 2 and 3 are for plug and unplug events
        query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent " +
            "WHERE EventType = 2 OR EventType = 3");
        watcher.EventArrived += watcher_EventArrived;
        watcher.Query = query;
        watcher.Start();
    }
}
于 2015-09-21T13:33:42.950 回答
0

“Win32_VolumeChangeEvent .. 仅在 Windows Server 2003 上找到”-来源

于 2009-05-19T12:26:30.443 回答