Программная установка пакетов MSI

Я хотел бы установить данный пакет.msi программно из моего приложения на C# .NET, предпочтительно с параметрами установки, указанными в моем приложении (такими как путь установки, отказ от программного обеспечения и т. Д.).

Я сделал некоторые поиски, но я действительно не нашел ничего полезного. Самым многообещающим хитом была эта тема, но я не могу найти документацию Microsoft.Deployment.WindowsInstaller или из WindowsInstaller.Installer в этом отношении.

6 ответов

Я считаю, что упомянутый выше проект Deployment Tools Foundation - это надежный способ сделать это из.NET. Ссылаясь на Microsoft.Deployment.WindowsInstaller.dll, используйте следующий код для установки пакета:

Installer.SetInternalUI(InstallUIOptions.Silent);
Installer.InstallProduct(msiFilename, "ACTION=INSTALL ALLUSERS=2 MSIINSTALLPERUSER=");

Документация для оболочки.NET находится в файле.chm в каталоге установки XML установщика Windows в Program Files. Некоторые части этой библиотеки DLL свободно обертывают нативные API-интерфейсы Windows, поэтому здесь также может быть полезна документация, именно так я и обработал строку в приведенном выше фрагменте, чтобы удовлетворить мою ситуацию.

Есть COM-объект, который предлагает API для установщика:

Сначала добавьте ссылку на COM-объект "Библиотека объектов установщика Microsoft Windows" в ваш проект. Затем вы можете начать со следующего кода:

using System;
using WindowsInstaller;

namespace TestApp
{
    public class InstallerTest
    {
        public static void Install()
        {
            Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
            Installer installer = (Installer)Activator.CreateInstance(type);
            installer.InstallProduct("YourPackage.msi");
        }
    }
}

И есть документация об объекте установщика.

Проект "Инструменты развертывания", который является частью установки WIX3.5, содержит оболочку.NET для большинства (если не всех) API установщика Windows. Получите его, загрузив и установив установку WiX: http://wixtoolset.org/ (в настоящее время WiX 3.11, обновлено в августе 2017 г.).

Найдите файл Microsoft.Deployment.WindowsInstaller.dll в папке%ProgramFiles%\Windows Installer XML v3.??\SDK\. Установите ссылку в своем проекте на C# и попробуйте запустить различные API и посмотреть, получите ли вы желаемую функциональность.

Я настоятельно рекомендую использовать Deployment Tools Foundation поверх любого COM-взаимодействия из.NET-кода.

Основной Win32 API (который может быть вызван при необходимости) - MsiInstallProduct. Это где практически все другие упомянутые API и вызовы будут в конечном итоге.

https://msdn.microsoft.com/en-us/library/aa370315(v=vs.85).aspx

Просто передайте полный путь к файлу MSI и командной строке (включая тихие параметры и т. Д.) И проверьте результат, чтобы убедиться, что он установлен правильно.

Обратите внимание, что для управляемого кода существует простое объявление p/invoke:

[DllImport ("msi.dll", CharSet = CharSet.Auto, SetLastError = true)]

статический extern UInt32 MsiInstallProduct(строка packagePath, строка commandLine);

Самое простое решение - использовать msiexec вызвать установщик на.msi.

Вы можете настроить установку, используя параметры командной строки, включая настройку свойств MSI, автоматическую установку и т. Д.

Есть два подхода к решению вашей проблемы.

Первый из упомянутых @Glytzhkof - это использование Microsoft.Deployment.WindowsInstaller .NET wrapper API, Это очень мощный материал, но для его изучения требуется некоторое время. Вы можете получить последнюю версию здесь.

Другой подход заключается в использовании Transforms (файлы.MST). Файлы преобразования могут быть созданы с помощью Microsoft Orca или InstallShiled. MST содержит все необходимые настройки и могут быть применены к MSI с помощью этой командной строки:

msiexec /i somemsi.msi TRANSFORMS=somemst.mst /qb

Дополнительно вы можете передать параметры непосредственно в командной строке:

msiexec /i <somemsi.msi> /qb AGREETOLICENSE=YES INSTALLDIR=C:\Temp
etc...

Тем не менее, вам нужно будет отредактировать MSI в ORCA/InstallShield определить, какие параметры фактически используются.

Параметры, используемые в приведенном выше примере, не являются универсальными.

Фактическая установка может быть сложной из-за наличия пользовательских действий и т. Д. Фактически существует целая индустрия, которая построена вокруг настроек MSI. Это называется Applications Repackaging,

Другие вопросы по тегам