Здесь я использую указания: http://msdn.microsoft.com/en-us/library/ms257351(VS.80).aspx для создания класса управляемых событий.Вот код, который я написал:
[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, я могу просмотреть событие и «show mof»:
[dynamic: ToInstance, provider("WmiTest,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
class MyEvent
{
[read, key] string ID;
};
Обратите внимание, класс не наследуется от __ExtrinsicEvent
, что странно ...
Я также могу запустить select * from MyEvent
, и получить результат .Instrumentation.Fire()
также не возвращает ошибок.Однако, когда я пытаюсь подписаться на событие, используя опцию «Уведомление» , я получаю 0x80041059
Номер: 0x80041059
Средство: WMI
Описание: Класс не является классом события.
Что я делаю не так, и существует ли правильный способ создания управляемого события WMI?