Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Benannte SQL Server-Instanz mit Visual Studio 2017 Installer-Projekt

Zusammenfassung :Im Wesentlichen heißt es unten:1) Deaktivieren Sie die benutzerdefinierte Aktion zum Ausführen von SQL Server setup.exe in Ihrer aktuellen MSI. 2) Erstellen Sie ein einfaches WiX Burn Bundle um die SQLServer setup.exe zu starten und starten Sie dann Ihre vom Visual StudioInstaller-Projekt generierte MSI nachher. Oder noch besser, machen Sie das ganze MSI auch in WiX. Kommerzielle Tools wie Advanced Installer und Installshield sind praktikable Optionen - sie verfügen über eine integrierte Unterstützung dafür (die Funktionen variieren je nach Version der Voraussetzung).

Bundle-Mockup brennen (Inspiration, mehr Inspiration):

Nur um zu zeigen, wie das WiX Burn-Markup funktioniert:

<?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 Ursache :Ich bin kein Experte für Visual Studio Installer-Projekte - es muss gesagt werden - jedes Mal. Allerdings haben diese Projekte eine Reihe von Einschränkungen und Macken, wie Sie festgestellt haben. Eine der Macken ist, dass alle benutzerdefinierten Aktionen im verzögerten Modus und im Systemkontext (ausgeführt als LocalSystem) ohne Identitätswechsel des startenden Benutzers ausgeführt werden. Dies ist wahrscheinlich die Ursache des angezeigten Problems - wie Sie selbst sagen.

Obwohl es möglich ist, die MSI, die Sie aus den VS Installer-Projekten erhalten, nachzubearbeiten, ist es besser, die Verwendung einer benutzerdefinierten Aktion zum Starten der SQL Server-Installation zu eliminieren. Weitere Details unten. Die Nachbearbeitung würde die Änderung des benutzerdefinierten Aktionstyps von 3078 auf 1030 umfassen, sodass der Benutzeridentitätswechsel aktiviert wird – was übrigens auch bedeutet, dass die benutzerdefinierte Aktion nicht mit erhöhten Rechten ausgeführt wird – und daher nur erfolgreich sein kann, wenn die gesamte MSI mit erhöhten Rechten gestartet wurde.

Hinweis :Im Folgenden schlage ich vor, die Brennfunktion von WiX (Open Source) oder ein gleichwertiges, leistungsfähiges kommerzielles Tool zu verwenden. Die Brennfunktion von WiX kann mit MSI-Dateien verwendet werden, die vom Visual Studio 2017 Installer-Projekt erstellt wurden, oder mit MSI-Dateien, die von einem anderen Tool erstellt wurden (auch EXE-Dateien). Sie stecken einfach die von VS2017 generierte MSI in das WiX-Bundle (oder die EXE-Datei). WiX kann natürlich auch selbst MSI-Dateien erstellen (dafür ist das Framework da). WiX-Schnellstart-Links .

MSI-Technologie-Eigenart :Das Starten anderer Installer aus benutzerdefinierten MSI-Aktionen ist keine gute Vorgehensweise. Wenn das andere Installationsprogramm ein anderes MSI ist (und nicht nur eine Nicht-MSI-setup.exe), dann ist es aufgrund technischer Einschränkungen nicht einmal möglich, dies zuverlässig zu tun (keine zwei MSI InstallExecuteSequences können aufgrund eines Mutex, der während der Installation gesetzt wird, gleichzeitig ausgeführt werden). Mit anderen Worten:gleichzeitige MSI-Installationen sind verboten und technisch unmöglich.

Brennen :Rufen Sie die Brennen-Funktion von WiX auf - der downloader / bootstrapper / sequencer Tool, das Paketinstallationen nacheinander von seinem eigenen Wrapper setup.exe ausführt . Es kann MSI-Dateien, EXE-Dateien und andere Arten von Paketen installieren - eines nach dem anderen ohne technische Einschränkungen wie die von MSIs Mutex. Seriell, nicht parallel laufend.

Installation von SQL Server :Sie können das SQL Server EXE-Installationsprogramm über ein solches Burn-Bundle beenden und die von Ihnen aufgelisteten Parameter als Befehlszeilenparameter angeben, anstatt dies in verwaltetem Code (mit den damit verbundenen Laufzeitanforderungen) zu tun. Anschließend starten Sie Ihr Haupt-MSI aus demselben Bundle.

Burn-Crashkurs :Es gibt eine Lernkurve für Burn. Es ist "fummelig" (es ist Code / Markup - immer fummelig), aber es ist sehr flexibel. Ich möchte diesen erweiterten Installer hinzufügen scheint eine gute Unterstützung für die Bereitstellung von SQL Server zu haben, auch wenn ich nie die Zeit hatte, dies im Detail zu untersuchen. Installshield kann mit seinen Suite-Projekten EXE-Dateien und MSI-Dateien nacheinander installieren Feature (überprüfen Sie den verlinkten Screenshot). Nicht sicher über die allgemeine SQL Server-Unterstützung.

Einige Brennbeispiel-Links :

  • Bootstrapping
  • Gewusst wie:Installieren Sie das .NET Framework mit Burn
  • Ein schönes Beispiel dafür, was Burn kann:https://github.com/frederiksen/Classic-WiX-Burn-Theme.
  • Mein eigenes Burn Bundle-Markup im "Hello World"-Stil (mit weiteren Links).
  • Neil Sleightholm:http://neilsleightholm.blogspot.com/2012/05/wix-burn-tipstricks.html
  • Mit Burn können Sie Ihre eigene Setup-GUI-Anwendung schreiben (erweitert):https://github.com/rstropek/Samples/tree/master/WiXSamples/CustomBurnUI (weitere Beispiele eine Ebene höher)

Einige Links :

  • Wix Burn:Wie man Bootstrapper daran hindert, sich selbst zu installieren
  • Helloworld-Beispiel von Wix Burn
  • Umfassende Liste von Befehlszeilen-Flags/Optionen für Burn/Bootstrapper in WiX
  • Wix Burn - benutzerdefinierte Vorlage
  • MST-Sprachumwandlungsdateien zur Burn Bundle Chain hinzufügen? (zu viele Links)