2009-05-19 112 views
0

我試圖使用以下c#代碼來檢測附加/移除的事件 usb大容量存儲設備。我正在使用Win32_VolumeChangeEvent。WMI事件Win32_VolumeChangeEvent在Windows XP上工作


// 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工作(沒有收到任何事件)。 Microsoft文檔說這應該起作用(http://msdn.microsoft.com/en-us/library/aa394516(VS.85).aspx)。我搜索了很長一段時間,發現其他人也有這個問題。但我也發現了一些文章,聲稱這種查詢(主要是VBScript)適用於XP。但是我無法從微軟那裏找到關於這個問題的一些官方信息,我不相信微軟已經忽略了三個服務包的這個問題。

所以我的問題是:有人在XP上成功使用Win32_VolumeChangeEvent,或者可以提供一個鏈接/解釋爲什麼它不應該在XP上工作?

回答

0

正如你可以在自己的link,爲Win32_VolumeChangeEvent最低支持的客戶端版本是Windows Vista中讀取。無論如何,如建議here,您可以在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(); 
    } 
} 
+0

當六年前我問這個問題時,它並沒有寫在文檔中,但現在是這樣。無論如何,我希望沒有人爲Windows XP開發;-) – 2015-09-22 08:47:34

0

「Win32_VolumeChangeEvent ..只在Windows Server 2003中發現了」 - source

相關問題