Announcement

Collapse
No announcement yet.

Windows-Dienst programmgesteuert aktualisieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Windows-Dienst programmgesteuert aktualisieren

    Hallo,

    kennt jemand Beispiel-Code, der einen Widows-Dienst mit Hilfe einer abgeleiteten Installer-Klasse deinstalliert und wieder neu installiert?

    Situation: Ein Dienst greift in bestimmten Intervallen auf einen Web-Service zu. Dieser Dienst muss von Zeit zu Zeit automatisch und im Hintergrund aktualisiert werden. Dies geschieht in einem separaten Prozess.

    Die Aufgabe habe ich durch den Aufruf eines msi-Paketes gelöst. Dies ist aber nicht befriedigend, da der Anwender nach der Erstinstallation evtl. die Identität, unter der der Dienst ausgeführt hat geändert hat. Diese soll jedoch erhalten bleiben nach einer Aktualisierung.

    Vor einer Aktualisierung müsste ich mir also im Code Account, Username, Password und StartType merken und nach der Aktualisierung wieder eintragen.

    Meine Idee war es, eine Installer-Klasse abzuleiten, einen ServiceInstaller und einen ServiceProcessInstaller hinzuzufügen (wie es beim Setup-Projekt ja auch getan wird), die Daten auszulesen, einen Rollback und Uninstall und anschliessend wieder ein Install und Commit auszuführen.

    Die MSDN ist zu diesem Thema leider nicht sehr hilfreich, da sie mir lediglich empfiehlt, die Methoden nicht direkt aufzuriufen.
    Mir ist auch die Reihenfolge der Aufrufe, sowie die Handhabung des IDictionary nicht ganz klar.

    Hatte schon jemand ein ähnliches Problem oder kennt geeigneten Beispiel-Code für dieses Problem?

    Viele Dank im Voraus

  • #2
    Wieso nicht auch mit nem anderen Denkansatz? Einen separaten Updater, der deinen Dienst einfach beendet, die Dateien austauscht und den Dienst wieder startet? Ganz ohne dass Anmeldeinformationen und Einstellungen verloren gehen

    Comment


    • #3
      Leider funktioniert das aber nicht für signierte Assemblies. Und um die Siegnierung kommen wir leider nicht herum.
      Mit viel try and Error ist es mir inzwischen auch gelungen, einen Installerklasse korrekt abzuleiten. Das Problem ist aber, dass der Anwender inzwischen möglicherweise die Konfiguration des Dienstes geändert hat (anderes Konto). Mit advapi kann ich diese zwar auslesen, aber es ist mit noch nicht gelungen, das Kennwort des Kontos zu retten und wieder zu setzen. Ein gehashtes Kennwort, welches ich dann wieder setzen könnte würde ja gnügen.
      Und das muss auch gehen, denn Windows macht bei seinen Updates ja nichts anderes.
      Keine Idee?

      Comment

      Working...
      X