Программная установка пакетов 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
,