sql >> Database >  >> RDS >> Sqlserver

SQL Server genoemd exemplaar met Visual Studio 2017 Installer-project

Samenvatting :In wezen zegt het onderstaande:1) Schakel de aangepaste actie uit om de SQL Server setup.exe uit te voeren in je huidige MSI. 2) Maak een eenvoudige WiX Burn Bundle om de SQLServer setup.exe te starten eerst, en start dan uw Visual StudioInstaller Project-gegenereerde MSI daarna. Of beter nog, maak de hele MSI ook in WiX. Commerciële tools zoals Advanced Installer en Installshield zijn haalbare opties - ze bieden ondersteuning hiervoor die ingebouwd is (functies variëren afhankelijk van de versie van de vereiste).

Burn Bundle-Mockup (inspiratie, meer inspiratie):

Gewoon om te laten zien hoe de WiX Burn-opmaak werkt:

<?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>

Technische oorzaak :Ik ben geen expert op het gebied van Visual Studio Installer-projecten - het moet gezegd - elke keer weer. Deze projecten hebben echter een aantal beperkingen en eigenaardigheden, zoals je hebt ontdekt. Een van de eigenaardigheden is dat alle aangepaste acties worden uitgevoerd in de uitgestelde modus en in systeemcontext (draaiend als LocalSystem) zonder imitatie van de startende gebruiker. Dit is waarschijnlijk de oorzaak van het waargenomen probleem - zoals u zelf aangeeft.

Hoewel het mogelijk is om de MSI die u van de VS Installer-projecten krijgt na te verwerken, is het beter om het gebruik van een aangepaste actie om de SQL Server-installatie te starten, te elimineren. Meer details hieronder. Bij de naverwerking zou het aangepaste actietype moeten worden gewijzigd van 3078 naar 1030, zodat gebruikersimitatie is ingeschakeld - wat ook betekent dat de aangepaste actie trouwens niet verhoogd wordt uitgevoerd - en daarom alleen kan slagen als de hele MSI verhoogd is gestart.

Opmerking :Hieronder stel ik voor om WiX's Burn-functie (Open Source) of een gelijkwaardige, capabele commerciële tool te gebruiken. De Burn-functie van WiX kan worden gebruikt met MSI-bestanden die zijn gemaakt door het Visual Studio 2017 Installer-project, of MSI-bestanden die zijn gemaakt door een andere tool (ook EXE-bestanden). U sluit gewoon de door VS2017 gegenereerde MSI aan op de WiX-bundel (of het EXE-bestand). WiX kan uiteraard ook zelf MSI-bestanden aanmaken (daar is het framework voor). WiX-snelstartlinks .

MSI Technology Quirk :Het is geen goede gewoonte om andere installatieprogramma's van MSI-aangepaste acties af te kicken. Als het andere installatieprogramma een andere MSI is (en niet alleen een niet-MSI setup.exe), dan is het vanwege technische beperkingen niet eens betrouwbaar mogelijk om dit te doen (geen twee MSI InstallExecuteSequences tegelijkertijd kunnen draaien vanwege een mutex die is ingesteld tijdens de installatie). Met andere woorden:gelijktijdige MSI-installaties zijn verboden en technisch onmogelijk.

Branden :Ga naar WiX's Burn-functie - de downloader / bootstrapper / sequencer tool die pakketinstallaties in volgorde uitvoert vanuit zijn eigen wrapper setup.exe . Het kan MSI-bestanden, EXE-bestanden en andere soorten pakketten installeren - de een na de ander zonder technische beperkingen zoals die van MSI's mutex. Serieel, niet parallel.

SQL Server Installeren :Je kunt het SQL Server EXE-installatieprogramma starten via zo'n Burn-bundel, en je kunt de parameters die je opgeeft als opdrachtregelparameters specificeren, in plaats van dit in beheerde code te doen (met de runtime-vereisten die dat met zich meebrengt). Dan trap je achteraf je belangrijkste MSI af uit dezelfde bundel.

Burn Spoedcursus :Er is een leercurve voor Burn. Het is "onhandig" (het is code / markup - altijd onhandig), maar het is erg flexibel. Ik wil dat Geavanceerde installatieprogramma . toevoegen lijkt goede ondersteuning te hebben voor SQL Server-implementatie, zelfs als ik nooit de tijd heb gehad om het goed in detail te onderzoeken. Installshield kan EXE-bestanden en MSI-bestanden in volgorde installeren met behulp van de Suite-projecten functie (controleer de gekoppelde schermafbeelding). Niet zeker van de algemene ondersteuning voor SQL Server.

Enkele voorbeeldlinks branden :

  • Bootstrappen
  • How To:het .NET Framework installeren met Burn
  • Een mooi voorbeeld van wat Burn kan doen:https://github.com/frederiksen/Classic-WiX-Burn-Theme.
  • Mijn eigen "Hello World"-stijl Burn Bundle-opmaak (met verdere links).
  • Neil Sleightholm:http://neilsleightholm.blogspot.com/2012/05/wix-burn-tipstricks.html
  • Met Burn kun je je eigen GUI-toepassing voor het instellen schrijven (geavanceerd):https://github.com/rstropek/Samples/tree/master/WiXSamples/CustomBurnUI (meer voorbeelden op één niveau)

Enkele links :

  • Wix Burn:hoe te voorkomen dat Bootstrapper zichzelf installeert
  • Wix Burn helloworld voorbeeld
  • Uitgebreide lijst met opdrachtregelvlaggen/opties voor Burn/bootstrapper in WiX
  • Wix Burn - aangepaste sjabloon
  • Taaltransformatie .mst's toevoegen aan Burn Bundle Chain? (te veel links)


  1. Inleiding tot C

  2. Hoe Round() werkt in SQLite

  3. Sequenties niet beïnvloed door transacties?

  4. RDBMS en NoSQL overbruggen:inleiding tot 2DX UI-cluster