繁体   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