Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

[править]

для удаленной установки можно было бы использовать Installutil с опцией /MOF для генерации 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().

-дэйв

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top