簡體   English   中英

C#中的WMI查詢在非英語機器上不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM