Frage

Wir haben eine Anwendung in beide C ++ geschrieben und .NET, dass Installationen für alle Benutzer im Ordner Programme. Diese Anwendung lädt neue Versionen von mir selbst (als MSI-Installer) und laicht den neuen Installationsprozess selbst zu ersetzen.

Der Prozess installieren, wie es heute existiert:

  1. Kopieren ein Manager App (C #, .NET 2.0) in das temporäre Verzeichnis installieren. Rufen Sie das 'Manager'
  2. wird-Manager ausgeführt mit erhöhten privs pro diesem Artikel .
  3. Die ursprüngliche Anwendung beendet.
  4. Manager-Spawns das MSI-Installationsprogramm (mit erhöhter privs, da die Kopie erhöht wird)
  5. Manager-Spawns die neue Version der App.

Der Fehler:

Die neu installierte App befindet sich in erhöhter Zustand ausgeführt wird. Dies verursacht Probleme, werde ich nicht aufzuzählen hier.

Idealerweise die Einführung des neu installierten App mit den Berechtigungen des ursprünglichen Benutzers ausgeführt werden würde.

Ich kann nicht herausfinden, wie die App zurück degradieren nach Erhebung der Standardbenutzer zu sein.

Ein unelegant Hack:

(ja, ja, dieser ganze Prozess ist unelegant sowieso)

  1. Kopieren Sie die Installationsmanager in das temporäre Verzeichnis
  2. Führen Sie den Manager mit Standardbenutzer privs installieren. Nennen wir diese Instanz 'LowlyManager'.
  3. Original Anwendung beendet.
  4. LowlyManager laicht die App wieder , diesmal mit erhöhter privs. Lassen Sie uns Name dieser Instanz UpperManagement '
  5. UpperManagement laicht der Installer
  6. UpperManagement anmutig verlässt, den Exit-Code des Installateurs zurück.
  7. LowlyManager interpretiert den Fehlercode aus UpperManagement und laicht die neu installierte Anwendung. Dieses Mal wie das Original Aufrufer.

Gibt es einen besseren Weg, dies zu tun?

(Ich habe vor ein paar andere Details weggelassen und nach diesen Schritten, die den Prozess glatter für den Benutzer machen, aber das sollte ausreichen, um den Kern des Problems zu verstehen, ich zu lösen bin versucht.)

Weitere Anforderungen:

  • Wir können nicht als pro Benutzer zur Installation von Apps
  • Der Benutzer sollte nicht mit einem Authentifizierungsdialogfeld angezeigt werden, wenn UAC würde einfach gefragt: „Sind Sie sicher, dass Sie dies zulassen?“. Ich denke, das könnte eine Lösung töten WindowsImpersonationContext, aber ich bin mir nicht sicher.
  • Das System muss die Arbeit an XP, Vista und Windows 7 (auch wenn es ein separater Prozess für XP).
War es hilfreich?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top