Атрибут RunInstaller в сборке поставщика WMI - PullRequest
1 голос
/ 02 октября 2008

Я создаю разъединенного поставщика WMI в библиотеке классов. Все, что я прочитал, указывает на то, чтобы включить что-то вроде этого:

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

Я понимаю, что цель этой установки состоит в том, что инфраструктура Windows WMI должна знать структуру моего поставщика WMI, прежде чем она будет использована.

Мой вопрос - когда запускается этот "установщик"? MSDN говорит, что установщик будет вызываться «во время установки сборки», но я не уверен, что это означает или когда это произойдет в контексте библиотеки классов, содержащей поставщика WMI.

У меня сложилось впечатление, что это была автоматическая замена для запуска вручную InstallUtil.exe в сборке, содержащей провайдера WMI, но изменения, внесенные в провайдера, не распознаются инфраструктурой WMI Windows, если только Я вручную запускаю InstallUtil из командной строки. Я могу сделать это на своей машине во время разработки, но если приложение, использующее провайдера, развернуто на других машинах - что тогда?

Кажется, что эта комбинация RunInstaller / DefaultManagementInstaller не работает должным образом - правильно?

Ответы [ 3 ]

2 голосов
/ 03 октября 2008

Как я понимаю, DefaultManagementInstaller запускается с помощью installutil.exe - если вы не включите его, класс не будет установлен в WMI. Возможно, можно создать «проект установки» или «проект установщика», который запускает его, но я не уверен, потому что я не использую Visual Studio.

[править]

для удаленной установки можно использовать опцию Installutil with / MOF для генерации MOF для сборки и использовать mofcomp для ее перемещения в WMI.

1 голос
/ 17 декабря 2008

Я использую что-то вроде этого для программного вызова 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

0 голосов
/ 05 октября 2008

Спасибо, Урос. Похоже, что все, что делают RunInstaller и DefaultManagementInstaller, - это позволяет вам успешно запустить InstallUtil для сборки. Это странно, потому что я почти уверен, что не знал об InstallUtil в тот момент, когда я компилировал и играл с моим первым поставщиком WMI.

Я попытаюсь использовать файл MOF, и для собственного использования я могу просто запустить командную строку InstallUtil как событие после сборки в VS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...