2016-06-06 15 views
3

Ich weiß, dass dies ein Thema ist, das viele Male diskutiert wurde und die Leute immer behaupten: Wix Bootstrapper sollte nicht erhöht ausgeführt werden müssen. Lassen Sie mich unsere Anforderungen erklären und hoffentlich kann jeder eine Lösung vorschlagen, die auf allen Systemen funktioniert.Wix Bootstrapper Manifest oder erhöhte benutzerdefinierte Aktion

Unsere installierte Software ist ein Windows-Dienst, der erhöht ausgeführt wird. Der Dienst verfügt über verschiedene Einstellungen, die in einer Datenbank gespeichert sind, auf die nur Administratoren zugreifen können. Das Installationsprogramm ermöglicht auch die Konfiguration dieser Einstellungen, die als Teil der erhöhten Phase des Installationsprogramms durchgeführt wird. Und hier ist das Problem: Wir können die aktuellen Einstellungen nicht aus der Datenbank innerhalb der ungeladenen Phase des Bootstrappers laden.

Die einfachste Lösung wäre es, den gesamten Bootrapper erhöht zu betreiben, aber es scheint, dass Wix intensiv versucht, erhöhte Bootstrapper vom Design her zu verhindern. Alle Diskussionen in diesem Bereich führen zu seltsamen Lösungen, bei denen externe Tools verwendet werden, um nach der Wix-Kompilierung ein Anwendungsmanifest einzubetten.

Ja, theoretisch könnten wir die gesamten Datenbankanmeldeinformationen überarbeiten, um dem Installierer Lesezugriff zu gewähren, aber ich möchte dies aus Sicherheitsgründen verhindern. Wir könnten auch eine Kopie der Einstellungen für das Installationsprogramm an einem lesbaren Ort (z. B. in der Registry) aufbewahren, aber dies ist auch nicht nett zu verwalten.

Gibt es einen sauberen Wix-eingebauten Mechanismus, um diese Einstellungen zu laden oder den Bootstrapper von Anfang an mithilfe eines Anwendungsmanifests zu erhöhen? Wir sind uns bewusst, dass erhöhte Bootstrapper für den Benutzer "nicht nett" sind, aber unsere Software richtet sich an Service-Betreiber, die sowieso Administratorrechte haben müssen, um unsere Software zu betreiben.

Update # 1: Wir haben bereits eine benutzerdefinierte WPF-GUI als Bootstrapper-Anwendung mit der Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperApplication Klasse von Wix zur Verfügung gestellt.

+0

Wenn ich Bootstrapper erhöht ausgeführt werden musste, habe ich es nur aus der Quelle mit mehreren Manifest-Dateien neu erstellt. Für Wix 3.10 erfordert das Erstellen von VS 2015 mit Windows XP-Unterstützung für C++ aktiviert. Ich kann diesen Weg beschreiben, wenn Sie wirklich folgen müssen. –

+0

Was ich vielleicht vergessen habe zu erwähnen, ist, dass wir bereits unsere eigene UI mit 'Microsoft.Tools.WindowsInstallerXml.Bootstrapper: BootstrapperApplication' aufbauen; Ich bin mir nicht sicher, ob dies für dieses Thema einen Unterschied macht. Kann dieser benutzerdefinierte Bootstrapper-Build zu einem normalen Projekt gemacht werden, das Teil der Lösung ist, oder handelt es sich eher um einen vollständigen benutzerdefinierten Wix-Build, der mit Ihrem Ansatz erstellt wird? – Danielku15

+0

macht es keinen Unterschied. Nach dem Wiederaufbau müssen Sie den ursprünglichen Brennvorgang ersetzen.exe im Ordner mit Wix-Binärdateien und danach werden alle Bootstapper-Anwendungen, die mit diesen Binärdateien erstellt werden, beim Start nach Anmeldeinformationen fragen. –

Antwort

0

Wenn es nicht erforderlich ist, dass die Benutzeroberfläche selbst erhöht wird, können Sie die Installationsengine erzwingen, sodass alle Bootstrapper-Pakete in einem erhöhten Modus installiert \ ausgeführt werden.

Um die Engine zu erhöhen, verwenden Sie die Elevate-Methode der Engine (die Elevate erhält einen 'IntPtr hwndParent' Parameter - ich habe das IntPtr des Fensters verwendet und es hat super funktioniert).

(das Elevate Methode aufrufen, wird zeigen, \ die UAC-Bildschirm eingeblendet)

Denken Sie auch daran, dass das Elevate Verfahren nicht eine Sperroperation ist und von ich es immer wieder daran erinnern, wahr. Die einzige Möglichkeit (die ich gefunden habe) zu bestimmen, ob die Erhöhung tatsächlich erfolgreich war, besteht darin, sich beim Error-Ereignis des Bootstrappers zu registrieren und zu überprüfen, ob der Fehlertyp ErrorType.Elevate ist.

Beachten Sie, dass in dieser Lösung die UI selbst nicht erhöht bleibt.