Ich verwende Anweisungen von hier: http://msdn.microsoft.com/en-us/library/ms257351(VS.80).aspx, um eine verwaltete Ereignisklasse zu erstellen. Hier ist der Code, den ich schrieb:Verwaltete WMI-Ereignisklasse ist keine Ereignisklasse?
[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);
}
}
Ich kann ein Programm ausführen, und es installiert ordnungsgemäß. Mit wbemtest.exe ich auf das Ereignis durchsuchen, und „Show mof“:
[dynamic: ToInstance, provider("WmiTest,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
class MyEvent
{
[read, key] string ID;
};
Hinweis, wird die Klasse erben nicht von __ExtrinsicEvent
, das ist seltsam ...
ich auch select * from MyEvent
laufen kann, und get the result. Instrumentation.Fire()
gibt auch keinen Fehler zurück. Allerdings, wenn ich versuche zu Fall abonnieren mit "Benachrichtigung Query" option, ich bin immer 0x80041059
Nummer: 0x80041059
Einrichtung: WMI
Beschreibung: Klasse ist kein Ereignis Klasse.
Was mache ich falsch, und gibt es eine korrekte Möglichkeit, verwaltetes WMI-Ereignis zu erstellen?