J'ai créé un assembly séparé avec une classe destinée à être publiée via wmi. Ensuite, j'ai créé une application Windows Forms qui fait référence à cet assembly et tente de publier la classe. Lorsque j'essaie de publier la classe , j'obtiens une exception de type System.Management.Instrumentation.WmiProviderInstallationException. Le message de l'exception indique "Exception du type 'System.Management.Instrumentation.WMIInfraException' a été levée.". J'ai aucune idée de ce que cela signifie. J'ai essayé .Net2.0 et .Net3.5 (sp1 aussi) et obtiens les mêmes résultats. Ci-dessous ma classe wmi, suivie du code que j'ai utilisé pour la publier.Comment publier des classes wmi dans .net?
//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());
}