5

プロセスがいつ開始するかを追跡し、プロセスが終了するとイベントを発生させる必要があるアプリケーションを作成しています。

私は完全に機能し、英語のマシンで必要なことを正確に実行するコードを持っていますが、フランス語のマシンで同じアプリケーションを実行すると失敗します。

これが失敗するコードです

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台の同一のマシンでテストされましたが、最初の起動時に選択された言語のみが異なります。

4

1 に答える 1

6

指定した間隔が小さすぎるためと思われます...フランス語のWindowsXPSP3で試してみたところ、同じエラーが発生しました。しかし、代わりに間隔を1秒に変更すると、正常に機能します...1秒未満の間隔を指定することはできないようです。ただし、これが英語以外のOSでのみ発生する理由はわかりません...

編集:実際、私はそれがおそらくのバグであることに気づきましたWqlEventQueryqstart.QueryStringCurrentCulture = "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は、不変のカルチャを使用して数値をフォーマットすることを強制しないため、小数点が「。」でないカルチャではクエリが正しくなくなります。

を強制するCurrentCultureCultureInfo.Invariant、フランス語のOSでもクエリは正常に機能します。WQLクエリを手動で作成することもできます...

于 2011-05-11T09:39:45.187 に答える