1

アプリケーションの複数のインスタンスを実行しているときに、分離された WMI プロバイダー (.NET 3.5 の WMI プロバイダー拡張機能を使用して開発) でメソッドを呼び出すと、ExecutionEngineException がスローされるという問題に遭遇しました。以前に誰かがこの制限に遭遇したことがありますか、それとも私は何か間違ったことをしていますか?

(単純な) WMI プロバイダーを作成し、(WinForms) フォームの ctor として公開しました。アプリケーションの 1 つのインスタンスを実行すると、すべてがうまく機能します。ただし、アプリケーションの複数のインスタンスを実行すると、WMI メソッドを呼び出すときにインスタンスがクラッシュします。

WMI プロバイダー クラス (インストーラー クラス、および WMI オブジェクトを発行するフォーム) は、この記事にほぼ基づいています。

[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);
    }
}

もちろん、installutil を使用して WMI インストーラー クラスを実行します。次に、アプリケーションの 2 つのインスタンスを起動します。一方のプロセスで wmic ツールを使用して「Increment」WMI [ManagementTask] メソッドを呼び出すと、もう一方のプロセスがクラッシュします (奇妙なことに、呼び出したプロセスではありません)。

wmic /namespace:\\root\foo path Test.Id=<process-id> call increment

どんな提案でも大歓迎です。

4

0 に答える 0