1

我正在类库中创建一个解耦的 WMI 提供程序。我读过的所有内容都指向包括以下内容:

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

我收集此安装的目的是因为 Windows WMI 基础结构在使用之前需要了解我的 WMI 提供程序的结构。

我的问题是 - 这个“安装程序”什么时候运行?MSDN 说安装程序将在“安装程序集期间”被调用,但我不确定这意味着什么,或者它何时会在包含 WMI 提供程序的类库的上下文中发生。

我的印象是,这是针对包含 WMI 提供程序的程序集手动运行InstallUtil.exe的自动替换,但我对提供程序所做的更改不会被 Windows WMI 基础结构识别,除非我从命令提示符手动运行 InstallUtil。我可以在开发过程中在自己的机器上执行此操作,但如果将使用提供程序的应用程序部署到其他机器 - 那么怎么办?

看来这个 RunInstaller / DefaultManagementInstaller 组合不能正常工作 - 对吗?

4

3 回答 3

2

据我了解, DefaultManagementInstaller 由 installutil.exe 运行 - 如果您不包含它,则该类未安装在 WMI 中。也许可以创建一个运行它的“安装项目”或“安装程序项目”,但我不确定,因为我不使用 Visual Studio。

[编辑]

对于远程安装,一个选项可以是使用带有 /MOF 选项的 Installutil 来为程序集生成 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 文件,为了我自己的使用,我可以在 VS 中将 InstallUtil 命令行作为构建后事件运行。

于 2008-10-04T22:57:27.300 回答