Laden...

Datenbank-Server neu starten aus einer C#-Anwendung heraus

Erstellt von riehol vor 11 Jahren Letzter Beitrag vor 11 Jahren 902 Views
R
riehol Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren
Datenbank-Server neu starten aus einer C#-Anwendung heraus

verwendetes Datenbanksystem: PostgreSQL

Hallo,

mir stellt sich unter Windows 7 und C# bei der Verwendung von PostgreSQL als Datenbanksystem folgende Problematik.

Ich möchte aus meiner Anwendung heraus das kontinuierliche Archivieren der Datenbank aktivieren / deaktivieren. Dafür muss ich Konfigurationsdateien editieren und dann den Datenbank-Server neu starten.
Das Editieren ist kein Problem, nur das neu starten des Servers scheitert an den Benutzerrechten.
Das neu Starten geht nur von einem Administrator-Account oder dem bei der Installation der Datenbank angelegten Benutzer »postgres« heraus.

Damit eine in der Anzeige existierende Scrollbar weiter funktioniert und nicht stehen bleibt, starte ich aus dem Hauptprogramm einen neuen Thread. In diesem Thread habe ich folgende Wege, leider bislang ohne Erfolg, ausprobiert:

1.)
Ich habe eine Batch-Datei erstellt, in der ich ein Postgres-Tool »pg_ctl.exe« ansprechen wollte. Die Batch-Datei habe ich durch einen Process gestartet und gewartet, bis der Process fertig ist.
2.)
Dann wollte ich mich des ServiceControllers bedienen. Habe mir über den ServiceName den korrekten Service gesucht und versucht ihn mit .Stop() und .Start() neu zu starten. Ich habe auch hier auf den Status gewartet.

Auf beiden Wegen erhielt ich Fehlermeldungen, welche mir besagten, dass ich nicht die Berechtigungen hätte, entweder über die Batch-Datei pg_ctl zu benutzen, oder den Service zu stoppen.

Kann ich irgendwie unter benutzung meines »postgres«-Benutzerkontos und des Passwortes diese Aktionen ausführen? Oder mir für diesen arbeitenden Thread bzw. nur für den erstellten Process Administratorrechte besorgen?

Folgende Dinge habe ich durch googlen bereits versucht.

Ich bin langsam am verzweifeln.... und hoffe, jemand weiß einen Weg.

Für jede Antwort bin ich sehr dankbar.
Viele Grüße
Riewert

1.346 Beiträge seit 2008
vor 11 Jahren

Du kannst festlegen welcher Benutzer die Rechte hat einen Dienst zu starten und stoppen.

"C:\Program Files (x86)\Windows Resource Kits\Tools\subinacl.exe" /service "Name des Dienstes" /grant=[Account oder Gruppe]

Dann sollte auch der entsprechende Benutzeraccount das dürfen.

LG pdelvo

M
171 Beiträge seit 2012
vor 11 Jahren

Alternativ kannst Du Dir auch RunAs.exe nehmen und das als Prozess mit pg_ctl.exe als Parameter starten. Damit kannst Du den Benutzer vorgeben, der die als Parameter übergebene Anwendung ausführt.