【发布时间】:2011-05-10 16:43:01
【问题描述】:
我正在创建一个应用程序,该应用程序需要跟踪进程何时启动,然后在完成时引发事件。
我的代码可以完美运行,并且在英语机器上完全符合我的要求,但是当我在法语机器上运行相同的应用程序时它会失败。
这是失败的代码
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 台相同的机器上测试,唯一的区别是第一次启动时选择的语言。
【问题讨论】:
-
你确定它的语言环境是唯一的区别吗?操作系统版本和服务包呢?据我所知,如果可以解析查询,语言环境不会影响(英文错误是“Unparsable query”)。
-
我不能 100% 确定,但是两台机器都有相同的 .net 3.5 并且都是开箱即用的新机器。他们也都在运行 Windows 7 启动器。我会看看能不能找到另一台机器,我可以用不同的语言开始测试。
-
我有 2 台相同的笔记本电脑,并在一台以英语开头的笔记本电脑上进行了测试。所以肯定与机器启动的语言有关。
标签: c# .net wmi wmi-query managementeventwatcher