2008-10-02 48 views
1

我正在类库中创建分离的WMI提供程序。WMI提供程序集中的RunInstaller属性

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

我收集这些安装的目的是因为Windows WMI基础设施需要在使用前要知道我的WMI提供程序的结构:我读到的一切对包括东西沿着这些路线点。

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

我的印象是,这是为手动运行InstallUtil.exe对包含WMI提供程序的组件的自动更换,但我的变化作出的提供者不被Windows WMI基础设施的认可,除非我手动运行从命令提示符下运行InstallUtil。我可以在开发过程中在自己的机器上执行此操作,但是如果将使用提供程序的应用程序部署到其他计算机 - 那么会怎样?

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

回答

1

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

[编辑]

用于远程安装目录,一个选项可以是使用与Installutil/MOF选项生成MOF用于组装和使用mofcomp将其移动到WMI。

0

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

我将着眼于使用MOF文件和我自己的使用我可以运行InstallUtil命令行作为VS中的后构建事件。

1

我用这样的以编程方式调用InstallUtil:从您的Main()方法

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

调用此。

-dave