Сводка : По сути, следующие состояния: 1)
Отключить настраиваемое действие для запуска SQL Server setup.exe
в вашем текущем
MSI. 2)
Создать базовый WiX Burn Bundle
для запуска SQL
Сервер setup.exe
сначала, а затем запустить Visual Studio
Установщик проекта сгенерированный MSI
впоследствии. Или еще лучше сделать
весь MSI в WiX также. Коммерческие инструменты, такие как Advanced Installer и Installshield , являются жизнеспособными вариантами - они имеют встроенную поддержку для этого (функции могут различаться в зависимости от версии обязательного компонента).
Burn Bundle-Mockup ( вдохновение , больше вдохновения ):
Просто чтобы попытаться показать, как работает разметка записи WiX:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name="MyCoolTestApp" Version="1.0.0.0"
Manufacturer="Someone" UpgradeCode="PUT-GUID-HERE">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<util:FileSearch Path="[WindowsFolder]System32\ucrtbase.dll" Variable="VCDISTINSTALLED"/>
<Chain>
<ExePackage SourceFile="vc_redist.x64.exe"
DetectCondition="VCDISTINSTALLED"
InstallCommand="/q /ACTION=Install"
RepairCommand="/q ACTION=Repair /hideconsole" />
<MsiPackage SourceFile="ShortcutDesktop.msi" />
</Chain>
</Bundle>
</Wix>
Техническая причина : Я не эксперт по проектам установщика Visual Studio - это нужно сказать - каждый раз. Однако, как вы обнаружили, у этих проектов есть ряд ограничений и изюминок. Одна из странностей заключается в том, что все пользовательские действия выполняются в отложенном режиме и в системном контексте (выполняются как LocalSystem) без олицетворения запускающего пользователя. Это, вероятно, причина видимой проблемы - как вы сами заявляете.
Хотя возможно постобработать MSI , который вы получаете из проектов VS Installer, лучше исключить использование настраиваемого действия для запуска установки SQL Server. Более подробная информация ниже. Постобработка будет включать в себя изменение типа настраиваемого действия с 3078 на 1030, так что пользовательская олицетворение будет включено - что также означает, что настраиваемое действие не выполняется с повышенным уровнем - и, следовательно, может быть успешным, только если весь MSI был запущен с повышенными правами.
Примечание : Ниже я предлагаю использовать функцию записи WiX (с открытым исходным кодом) или эквивалентный, способный коммерческий инструмент. Функцию записи WiX можно использовать с файлами MSI, созданными в проекте установщика Visual Studio 2017, или с файлами MSI, созданными любым другим инструментом (в том числе EXE-файлами). Вы просто подключаете сгенерированный VS2017 MSI к пакету WiX (или к файлу EXE). Очевидно, что WiX также может создавать файлы MSI (для этого и нужна инфраструктура). Быстрые ссылки WiX .
MSI Technology Quirk : Отстранение других установщиков от пользовательских действий MSI не является хорошей практикой. Если другой установщик - это другой MSI (а не просто не-MSI setup.exe), то это невозможно даже сделать надежно из-за технических ограничений (два MSI InstallExecuteSequences
не могут работать при в то же время из-за мьютекс, который устанавливается во время установки ). Другими словами: одновременные установки MSI запрещены и технически невозможны.
Burn : введите Функция записи WiX - инструмент downloader
/ bootstrapper
/ sequencer
, который запускает пакет последовательная установка из собственной оболочки setup.exe
. Он может устанавливать файлы MSI, EXE-файлы и другие виды пакетов - один за другим без технических ограничений, таких как мьютекс MSI. Последовательный, не параллельный запуск.
Установка SQL Server : Вы можете отключить установщик SQL Server EXE с помощью такого пакета записи, и вы можете указать параметры, которые вы перечислили в качестве параметров командной строки, вместо того, чтобы делать так в управляемом коде (с требованиями времени выполнения, что влечет за собой) Затем вы запускаете основной MSI из того же пакета.
Ускоренный курс Burn * : для Burn есть кривая обучения. Это «неудобно» (это код / разметка - всегда неудобно), но оно очень гибкое. Я хочу добавить, что Advanced Installer , кажется, имеет хорошую поддержку для развертывания SQL Server , даже если у него никогда не было времени для подробного изучения. Installshield может устанавливать EXE-файлы и MSI-файлы последовательно, используя функцию Suite (проверьте связанный снимок экрана). Не уверен в общей поддержке SQL Server.
Некоторые ссылки на образцы записи :
Некоторые ссылки :