[英]WMI query in C# does not work on NON-English Machine
我正在創建一個應用程序,該程序需要跟蹤進程何時開始,然后在完成時引發事件。
我的代碼可以完美運行,並且完全可以在英語計算機上滿足我的需要,但是當我在法語計算機上運行相同的應用程序時,它會失敗。
這是失敗的代碼
qstart = new WqlEventQuery("__InstanceCreationEvent",
new TimeSpan(0, 0, 0, 0, 5),
"TargetInstance isa \"Win32_Process\"");
qstop = new WqlEventQuery("__InstanceDeletionEvent",
new TimeSpan(0, 0, 0, 0, 5),
"TargetInstance isa \"Win32_Process\"");
try
{
using (wstart = new ManagementEventWatcher(qstart))
{
wstart.EventArrived += new EventArrivedEventHandler(ProcessStarted);
Log.DebugEntry("BeginProcess() - Starting wstart Event");
wstart.Start();
}
}
catch (Exception ex)
{
Log.DebugEntry("error on wstart: " + ex.Message);
}
using (wstop = new ManagementEventWatcher(qstop))
{
wstop.EventArrived += new EventArrivedEventHandler(ProcessStopped);
Log.DebugEntry("BeginProcess() - Starting wstop Event");
wstop.Start();
}
嘗試啟動查詢時出現錯誤:wstart.Start();
並對wstop.Start()做同樣的事情;
我只能猜測它與語言和查詢字符串有關,但我抓緊了稻草。
出現的錯誤是: “需求不可分析”
感謝您的任何幫助!
馬丁
編輯:在2台相同的計算機上進行了測試,唯一的不同是首次啟動時選擇的語言。
顯然是因為您指定的間隔太小...我剛在法語Windows XP SP3上嘗試過,卻遇到了同樣的錯誤。 但是,如果我將間隔更改為1秒,則可以正常工作……似乎您不能指定小於1秒的間隔。 不確定為什么這只會在非英語操作系統上發生,但是...
編輯:實際上我只是意識到這可能是WqlEventQuery
的錯誤。 qstart.QueryString
類似於CurrentCulture =“ en-US”:
select * from __InstanceCreationEvent within 0.005 where TargetInstance isa "Win32_Process"
但是使用CurrentCulture =“ fr-FR”時,它看起來像這樣:
select * from __InstanceCreationEvent within 0,005 where TargetInstance isa "Win32_Process"
(請注意數字格式的差異)
因此,顯然WqlEventQuery
中的代碼不會強制使用不變區域性來格式化數字,從而使查詢在小數點分隔符不為“”的區域性中不正確。
如果將CurrentCulture
強制為CultureInfo.Invariant
,則即使在法語OS上,查詢也可以正常工作。 您也可以手動編寫WQL查詢...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.