1

クラス ライブラリに分離された WMI プロバイダーを作成しています。私が読んだことはすべて、これらの行に沿って何かを含めることを指しています:

[System.ComponentModel.RunInstaller(true)]
public class MyApplicationManagementInstaller : DefaultManagementInstaller { }

このインストールの目的は、Windows WMI インフラストラクチャが使用前に WMI プロバイダーの構造を認識している必要があるためだと思います。

私の質問は - この「インストーラー」はいつ実行されますか? MSDN によると、インストーラーは「アセンブリのインストール中に」呼び出されるとのことですが、それが何を意味するのか、または WMI プロバイダーを含むクラス ライブラリのコンテキストでいつ起こるのかはわかりません。

これは、WMI プロバイダーを含むアセンブリに対してInstallUtil.exeを手動で実行するための自動化された置き換えであるという印象を受けましたが、コマンド プロンプトから手動で InstallUtil を実行しない限り、プロバイダーに加えた変更は Windows WMI インフラストラクチャによって認識されません。開発中に自分のマシンでこれを行うことができますが、プロバイダーを使用するアプリケーションが他のマシンにデプロイされた場合はどうなりますか?

この RunInstaller / DefaultManagementInstaller の組み合わせが正しく機能していないようです - 正しいですか?

4

3 に答える 3

2

私が理解しているように、DefaultManagementInstaller は installutil.exe によって実行されます。これを含めないと、クラスは WMI にインストールされません。それを実行する「セットアップ プロジェクト」または「インストーラ プロジェクト」を作成することは可能かもしれませんが、私は Visual Studio を使用していないため、わかりません。

[編集]

リモート インストールの場合、Installutil を /MOF オプションと共に使用してアセンブリの MOF を生成し、mofcomp を使用してそれを WMI に移動することができます。

于 2008-10-02T21:28:16.837 に答える
1

私は次のようなものを使用して、InstallUtilをプログラムで呼び出します。

    public static void Run( Type type )
    {
        // Register WMI stuff
        var installArgs = new[]
                                   {
                                       string.Format( "//logfile={0}", @"c:\Temp\sample.InstallLog" ), "//LogToConsole=false", "//ShowCallStack",
                                       type.Assembly.Location,
                                   };

        ManagedInstallerClass.InstallHelper( installArgs );
    }

Main()メソッドからこれを呼び出します。

-デイブ

于 2008-12-17T05:50:56.810 に答える
0

ありがとうウロス。RunInstaller と DefaultManagementInstaller が行うことは、アセンブリに対して InstallUtil を正常に実行できるようにすることだけです。これは奇妙です。なぜなら、私が最初の WMI プロバイダーをコンパイルして試した時点では、InstallUtil について知らなかったことはほぼ確実だからです。

私は MOF ファイルの使用を検討します。私自身の使用のために、InstallUtil コマンド ラインを VS のビルド後のイベントとして実行するだけです。

于 2008-10-04T22:57:27.300 に答える