Sammanfattning :I huvudsak står nedan:
1)
Inaktivera den anpassade åtgärden för att köra SQL Serversetup.exe
i ditt nuvarande MSI.2)
Skapa ett grundläggandeWiX Burn Bundle
för att starta SQLServersetup.exe
först och sedan starta ditt Visual StudioInstaller-projektgenereradeMSI
i efterhand. Eller ännu bättre, gör hela MSI i WiX också. Kommersiella verktyg som Advanced Installer och Installshield är genomförbara alternativ - de har stöd för detta som är inbyggt (funktionerna varierar beroende på version av förutsättning).
Burn Bundle-Mockup (inspiration, mer inspiration):
Bara för att försöka visa hur WiX Burn-uppmärkningen fungerar:
<?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>
Teknisk orsak :Jag är ingen expert på Visual Studio Installer Projects - det måste sägas - varje gång. Dessa projekt har dock ett antal begränsningar och egenheter, som du har upptäckt. En av egenheterna är att alla anpassade åtgärder körs i uppskjutet läge och i systemkontext (körs som LocalSystem) utan att vara den startande användaren. Detta är troligen orsaken till problemet sett - som du själv säger.
Även om det är möjligt att efterbehandla MSI som du får från VS Installer Projects, är det bättre att eliminera användningen av en anpassad åtgärd för att starta installationen av SQL Server. Mer information nedan. Efterbehandlingen skulle innebära att ändra anpassad åtgärdstyp från 3078 till 1030 så att användarimitation är aktiverat - vilket också innebär att den anpassade åtgärden inte körs förhöjt förresten - och därför bara kan lyckas om hela MSI lanserades förhöjt.
Obs :Nedan föreslår jag att du använder WiX:s Burn-funktion (öppen källkod), eller ett motsvarande, kapabelt kommersiellt verktyg. WiX:s Burn-funktion kan användas med MSI-filer skapade av Visual Studio 2017 Installer-projektet, eller MSI-filer skapade av något annat verktyg för den delen (även EXE-filer). Du kopplar bara in den VS2017-genererade MSI till WiX-paketet (eller EXE-filen). WiX kan självklart också skapa MSI-filer själv (det är vad ramverket är till för). WiX snabbstartslänkar .
MSI Technology Quirk :Att sparka igång andra installatörer från MSI anpassade åtgärder är inte bra praxis. Om det andra installationsprogrammet är en annan MSI (och inte bara en icke-MSI setup.exe), är det inte ens möjligt att göra det på ett tillförlitligt sätt på grund av tekniska begränsningar (inga två MSI InstallExecuteSequences
kan köras samtidigt på grund av en mutex som ställs in under installationen). Med andra ord:samtidiga MSI-installationer är förbjudna och tekniskt omöjliga.
Bränn :Öppna WiX:s bränningsfunktion - downloader
/ bootstrapper
/ sequencer
verktyg som kör paketinstallationer i sekvens från sin egen wrapper setup.exe
. Den kan installera MSI-filer, EXE-filer och andra typer av paket - en efter en utan tekniska begränsningar som MSI:s mutex. Seriell, inte parallellkörning.
SQL-serverinstallation :Du kan starta installationsprogrammet för SQL Server EXE via ett sådant Burn-paket, och du kan specificera parametrarna du listar som kommandoradsparametrar, istället för att göra det i hanterad kod (med de körtidskrav som det innebär). Sedan kickar du igång din huvudsakliga MSI efteråt från samma paket.
Burn Crash Course :Det finns en inlärningskurva för Burn. Det är "fiddly" (det är kod / markering - alltid krångligt), men det är väldigt flexibelt. Jag vill lägga till det avancerade installationsprogrammet verkar ha bra stöd för SQL Server-distribution, även om jag aldrig har haft tid att undersöka ordentligt i detalj. Installshield kan installera EXE-filer och MSI-filer i följd med hjälp av dess Suite-projekt funktion (kolla den länkade skärmdumpen). Inte säker på det övergripande stödet för SQL Server.
Några brännexempellänkar :
- Bootstrapping
- Så här gör du:Installera .NET Framework med Burn
- Ett bra exempel på vad Burn kan göra:https://github.com/frederiksen/Classic-WiX-Burn-Theme.
- Min egen "Hello World"-stil Burn Bundle-uppmärkning (med ytterligare länkar).
- Neil Sleightholm:http://neilsleightholm.blogspot.com/2012/05/wix-burn-tipstricks.html
- Burn låter dig skriva ditt eget GUI-program för installation (avancerat):https://github.com/rstropek/Samples/tree/master/WiXSamples/CustomBurnUI (fler exempel upp en nivå)
Några länkar :
- Wix Burn:Hur man stoppar Bootstrapper från att installera sig själv
- Exempel på Wix Burn helloworld
- Omfattande lista över kommandoradsflaggor/alternativ för Burn/bootstrapper i WiX
- Wix Burn - anpassad mall
Lägger du till språktransformerings-.mst's till Burn Bundle Chain?(för många länkar)