Получите название продукта из msi файла в C#

Devtools's menu

Вы можете нажать здесь и выбрать Undock to seperate windows.

5
задан saschabeaumont 16 March 2009 в 21:12
поделиться

3 ответа

Необходимо использовать:

        Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");

Вот образец из части моего кода - в моем случае, я получаю версию установщика:

        // Get the type of the Windows Installer object
        Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");

        // Create the Windows Installer object
        Installer installer = (Installer)Activator.CreateInstance(installerType);

        // Open the MSI database in the input file
        Database database = installer.OpenDatabase(inputFile, MsiOpenDatabaseMode.msiOpenDatabaseModeReadOnly);

        // Open a view on the Property table for the version property
        View view = database.OpenView("SELECT * FROM Property WHERE Property = 'ProductVersion'");

        // Execute the view query
        view.Execute(null);

        // Get the record from the view
        Record record = view.Fetch();

        // Get the version from the data
        string version = record.get_StringData(2);
6
ответ дан 14 December 2019 в 01:17
поделиться

Не был бы это быть легче использовать этот код:

Type type = typeof(Windows.Installer);

Если Вы предпочитаете Тип. GetType (Строка) перегрузка необходимо включать корректное имя сборки после полного пути к классу, например:

Type type = Type.GetType("Windows.Installer, <assembly for MsiInstaller>");

2
ответ дан 14 December 2019 в 01:17
поделиться

Где Вы получали "Windows. Установщик" материал от?

... потому что:

  1. Type.GetType берет имя типа.NET, не COM ProgId.
  2. Windows Installer (по крайней мере, в Windows 2003) не имеет ProgId.

Таким образом: Используйте P/Invoke (DllImport, и т.д.), чтобы говорить с API MSI.

1
ответ дан 14 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: