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

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

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

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

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

似乎此RunInstaller / DefaultManagementInstaller组合无法正常工作 - 是否正确?

有帮助吗?

解决方案

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

[编辑]

对于远程安装,一个选项可以是使用带有/ MOF选项的Installutil为程序集生成MOF并使用mofcomp将其移动到WMI。

其他提示

我使用类似的东西以编程方式调用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()方法调用此方法。

-Dave

谢谢Uros。它看起来像RunInstaller和DefaultManagementInstaller所做的一切,使您能够成功地对程序集运行InstallUtil。这很奇怪,因为我几乎可以肯定,在我编译和使用我的第一个WMI提供程序时,我不知道InstallUtil。

我将查看使用MOF文件并自行使用我可以在VS中作为post build事件运行InstallUtil命令行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top