Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在解耦的WMI提供程序上调用方法时ExecutionEngineeException_C#_.net 3.5_Wmi_Executionengineexception - Fatal编程技术网

C# 在解耦的WMI提供程序上调用方法时ExecutionEngineeException

C# 在解耦的WMI提供程序上调用方法时ExecutionEngineeException,c#,.net-3.5,wmi,executionengineexception,C#,.net 3.5,Wmi,Executionengineexception,我遇到了一个问题,在运行应用程序的多个实例时,在解耦的WMI提供程序(使用.NET 3.5中的WMI提供程序扩展开发)上调用方法会引发ExecutionEngineeException。以前有没有人遇到过这种限制,或者我做错了什么 我创建了一个(简单的)WMI提供程序,并将其发布到(WinForms)表单的ctor。如果您运行应用程序的一个实例,那么一切都很好;但是,如果您运行应用程序的多个实例,则其中一个实例在调用WMI方法时将崩溃 下面是它大致基于的WMI提供程序类(安装程序类和发布WMI对

我遇到了一个问题,在运行应用程序的多个实例时,在解耦的WMI提供程序(使用.NET 3.5中的WMI提供程序扩展开发)上调用方法会引发ExecutionEngineeException。以前有没有人遇到过这种限制,或者我做错了什么

我创建了一个(简单的)WMI提供程序,并将其发布到(WinForms)表单的ctor。如果您运行应用程序的一个实例,那么一切都很好;但是,如果您运行应用程序的多个实例,则其中一个实例在调用WMI方法时将崩溃

下面是它大致基于的WMI提供程序类(安装程序类和发布WMI对象的表单)

[程序集:WmiConfiguration(@“root\foo”,HostingModel=ManagementHostingModel.Decoupled)]
[管理实体(单例=假)]
[ManagementQualifier(“Description”,Value=“获取处理器信息”)]
公开课考试
{
私有只读int_id;
私有整数值;
[管理绑定]
公共测试([ManagementName(“Id”)]int-Id)
{
_id=id;
}
[管理钥匙]
公共整数Id
{
获取{return\u id;}
}
[管理探索]
[ManagementQualifier(“Description”,Value=“处理器数量”)]
公共整数值
{
获取{返回_值;}
}
[管理任务]
公共空间增量()
{
_值++;
}
公共静态测试创建()
{
int id=Process.GetCurrentProcess().id;
var wmi=新测试(id);
返回wmi;
}
}
/// 
///此安装程序用于.NET 3.5支持的WMI提供程序扩展。
/// 
公共类LearningWmiManagementInstaller:DefaultManagementInstaller
{}
公共部分类Form1:Form
{
私人测试(pi),;
公共表格1()
{
初始化组件();
_pi=Test.Create();
InstrumentationManager.Publish(_-pi);
}
关闭时受保护的覆盖无效(事件参数e)
{
基础。一旦关闭(e);
InstrumentationManager.Revoke(_-pi);
}
}
当然,我使用installutil来运行WMI安装程序类。接下来,启动应用程序的两个实例。如果在其中一个进程上使用wmic工具调用“增量”WMI[ManagementTask]方法,则另一个进程将崩溃(奇怪的是,不是您调用的那个)

wmic/namespace:\\root\foo路径测试.Id=调用增量
如有任何建议,将不胜感激

[assembly: WmiConfiguration(@"root\foo", HostingModel = ManagementHostingModel.Decoupled)]    

[ManagementEntity(Singleton = false)]
[ManagementQualifier("Description", Value = "Obtain processor information.")]
public class Test
{
    private readonly int _id;
    private int _value;

    [ManagementBind]
    public Test([ManagementName("Id")] int id)
    {
        _id = id;
    }

    [ManagementKey]
    public int Id
    {
        get { return _id; }
    }

    [ManagementProbe]
    [ManagementQualifier("Description", Value = "The number of processors.")]
    public int Value
    {
        get { return _value; }
    }

    [ManagementTask]
    public void Increment()
    {
        _value++;
    }

    public static Test Create()
    {
        int id = Process.GetCurrentProcess().Id;
        var wmi = new Test(id);
        return wmi;
    }
}

/// <summary>
/// This installer is for the WMI Provider Extensions for .NET 3.5 support.
/// </summary>
public class LearningWmiManagementInstaller : DefaultManagementInstaller 
{}

public partial class Form1 : Form
{
    private Test _pi;

    public Form1()
    {
        InitializeComponent();

        _pi = Test.Create();
        InstrumentationManager.Publish(_pi);
    }

    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        InstrumentationManager.Revoke(_pi);
    }
}
wmic /namespace:\\root\foo path Test.Id=<process-id> call increment