Ich habe eine separate Assembly mit einer Klasse erstellt, die durch WMI veröffentlicht werden soll. Dann habe ich eine Windows Forms App erstellt, die diese Assembly referenziert und versucht, die Klasse zu veröffentlichen. Wenn ich versuche, die Klasse zu veröffentlichen, erhalte ich eine Ausnahme vom Typ System.Management.Instrumentation.WmiProviderInstallationException. Die Botschaft der Ausnahme sagt: „Ausnahme vom Typ ‚System.Management.Instrumentation.WMIInfraException‘geworfen wurde.“. Ich habe keine Ahnung, was das bedeutet. Ich habe versucht. Net2.0 und. Net3.5 (SP1 zu) und bekomme die gleichen Ergebnisse.Wie veröffentlicht man WMI-Klassen in .net?
Unten ist meine WMI-Klasse, gefolgt von dem Code, den ich verwendet habe, um es zu veröffentlichen.
//Interface.cs in assembly WMI.Interface.dll
using System;
using System.Collections.Generic;
using System.Text;
[assembly: System.Management.Instrumentation.WmiConfiguration(@"root\Test",
HostingModel =
System.Management.Instrumentation.ManagementHostingModel.Decoupled)]
namespace WMI
{
[System.ComponentModel.RunInstaller(true)]
public class MyApplicationManagementInstaller :
System.Management.Instrumentation.DefaultManagementInstaller { }
[System.Management.Instrumentation.ManagementEntity(Singleton = true)]
[System.Management.Instrumentation.ManagementQualifier("Description",
Value = "Obtain processor information.")]
public class Interface
{
[System.Management.Instrumentation.ManagementBind]
public Interface()
{
}
[System.Management.Instrumentation.ManagementProbe]
[System.Management.Instrumentation.ManagementQualifier("Descriiption",
Value="The number of processors.")]
public int ProcessorCount
{
get { return Environment.ProcessorCount; }
}
}
}
//Button click in windows forms application to publish class
try
{
System.Management.Instrumentation.InstrumentationManager.Publish(new
WMI.Interface());
}
catch (System.Management.Instrumentation.InstrumentationException
exInstrumentation)
{
MessageBox.Show(exInstrumentation.ToString());
}
catch (System.Management.Instrumentation.WmiProviderInstallationException
exProvider)
{
MessageBox.Show(exProvider.ToString());
}
catch (Exception exPublish)
{
MessageBox.Show(exPublish.ToString());
}