2009-07-01 12 views
13

Ziel: Zur Unterstützung der Windows-Dienst, die mehrere Instanzen auf einer einzigen Maschine aufweisen kann, eine Setup-Projekt verwenden, um ein MSI der Lage zu erstellen:Windows Service-Name Geben Sie auf mit Setup-Projekt installieren

  1. Empfangen von Benutzereingaben für Service Name
  2. Installation Service
  3. Serialisieren Service Name von 1 (so dass der richtige Name in Protokollierung und deinstallation verwendet werden)

Meine anfängliche Hoffnung Service gesetzt war Benennen Sie in App.config (und rufen Sie es dann bei der Deinstallation nach der Instantiierung des ServiceInstaller ab. Dies scheint naiv zu sein, da es während der Installation nicht erreichbar ist.

Wenn MyInstaller das Installationsprogramm erweitert, kann es base.Install(); Meine Versuche, in app.config (in MyInstaller.Install() und nach base.Install()) zu schreiben, sind jedoch wirkungslos.

Während also der Dienst mit einem benutzerdefinierten Dienstnamen installiert werden kann, wird dieser Name nicht serialisiert, und der Installer ist bei der Deinstallation höchst unzufrieden.

Wie soll das gemacht werden?

Antwort

9

Sie können Parameter für Installationsaktionen angeben. Sammeln Sie den Dienstnamen und übergeben Sie ihn als Parameter an die Aktion. In der Klasse Installer können Sie dann Install() überschreiben und über base.Context.Parameters darauf zugreifen. So erhalten Sie den Wert. Nachdem Sie diesen Wert erhalten und verwendet haben, setzen Sie ihn in den Parameter stateSaverIDictionary, so dass Sie beim Überschreiben von Uninstall() herausfinden können, welcher Wert bei der Installation verwendet wurde.

+0

in plain site versteckt! Danke Neil. –

+2

könnten Sie Beispielcode bereitstellen? –

+2

Ich zweite Lucas! :-) – Junto

Verwandte Themen