2010-12-31 1 views
1

私はここからの指示を使用しています:http://msdn.microsoft.com/en-us/library/ms257351(VS.80).aspxを管理するイベントクラスを作成します。私が書いたコードは次のとおりです。管理WMIイベントクラスは、イベントのクラスではないでしょうか?

[ManagementEntity] 
[InstrumentationClass(InstrumentationType.Event)] 
public class MyEvent 
{ 
    [ManagementKey] 
    public string ID { get; set; } 
    [ManagementEnumerator] 
    static public IEnumerable<MyEvent> EnumerateInstances() 
    { 
     var e = new MyEvent() { ID = "9A3C1B7E-8F3E-4C54-8030-B0169DE922C6" }; 
     return new MyEvent[] { e }; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var thisAssembly = typeof(Program).Assembly; 
     var wmi_installer = new AssemblyInstaller(thisAssembly, null); 
     wmi_installer.Install(null); 
     wmi_installer.Commit(null); 

     InstrumentationManager.RegisterAssembly(thisAssembly); 

     Console.Write("Press Enter..."); 
     Console.ReadLine(); 
     var e = new MyEvent() { ID = "A6144A9E-0667-415B-9903-220652AB7334" }; 
     Instrumentation.Fire(e); 

     Console.Write("Press Enter..."); 
     Console.ReadLine(); 
     wmi_installer.Uninstall(null); 
    } 

} 

私はプログラムを実行することができ、正しくインストールされます。私はイベントに閲覧することができwbemtest.exe使用し、「ショーのMOF」:

[dynamic: ToInstance, provider("WmiTest, 
     Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")] 
class MyEvent 
{ 
    [read, key] string ID; 
}; 

お知らせ、クラスが...奇妙です__ExtrinsicEvent、から継承しない

私もselect * from MyEventを実行することができ、およびget the resultInstrumentation.Fire()もエラーを返しません。私は「通知クエリ」optionを使用してイベントをサブスクライブしようとしているときしかし、私は取得しています0x80041059

番号:0x80041059

施設:WMI

説明:クラスのイベントではありませんクラス。

私は間違っていますが、管理されたWMIイベントを作成する正しい方法はありますか?

答えて

1

は、いくつかの掘削後、私は何が起こったのかを考え出し:どうやらフレームワーク4に、古典的なものに干渉され、導入されたWMIクラスと属性の第二の「ブランチ」がありました。インターネット上で見つけたすべてのサンプルコードは、.NET 2.0 WMIサポートを念頭に置いて書かれています。私は__eventまたは__ExtrinsicEventからクラスを継承するために、.NET 4つのクラスとの方法を発見していません。

Microsoftが相互に動作しますが、彼らは互いの機能を壊さないだけでなく、同じ名前空間へのコードの互換性のない2つの枝を導入することを見つけることは非常に迷惑しています。

  • 完全WMIアセンブリ内DefaultManagementInstaller派生クラスを取り除く:私は基本的に必ず私のアプリは、.NET 2のコードを使用している作っていた問題を修正するために行うために必要なものを任意の割合で

    DefaultManagementProjectInstallerを使用してください。
  • 使用Instrumentation.RegisterAssemblyの代わりInstrumentationManager.RegisterAssembly
  • WMIクラスが正しく、.NET 2 APIを使用した名前空間から削除されていないので、Uninstall()上でWMI名前空間のいくつかの手動クリーンアップを行います。
  • フィールドをフィールドにすることが不可能であることに対処する。[key] .NET 2 api
関連する問題