Laden...

Automatischer Programmstart mittels Dienst oder Scheduled Task ohne angemeldeten Benutzer

Erstellt von riehol vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.193 Views
R
riehol Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren
Automatischer Programmstart mittels Dienst oder Scheduled Task ohne angemeldeten Benutzer

Hallo liebe Entwicklergemeinde,

ich hoffe, ich habe nichts übersehen, aber nach längerem Suchen suche ich Rat bei folgendem Problem.

Ich habe bereits eine MDI-Anwendung geschreiben, die ein simples Backup und Restore für eine PostgreSQL-Datenbank macht, sowie das Backup und Restore über Write-Ahead-Logging konfiguriert und der User nichts mehr an der Datenbank selber machen muss.

Mit Hilfe dieses Programmes soll es auch möglich sein, das Ganze automatisch ausführen zu lassen, auch dann wenn kein Benutzer an dem Rechner angemeldet ist.
Angabe von Uhrzeit und Datum, sowie die Backup-Periode ist alles realisiert. Ich hatte einen Scheduled Task erstellt, der genau das getan hat. Aber leider nur dann, wenn auch jemand an dem Rechner angemeldet ist.

Kern des Problems ist, dass aus dem Programm irgendwie heraus ein Dienst oder ein Task installiert werden soll, der zu einem gewissen Zeitpunkt, meinetwegen 3:00 Nachts, das Programm mit dem Argument "automatic" aufruft. Dann (das sollte auch schon richtig funktionieren) erledigt mein Programm seine Arbeit und beendet sich wieder selbstständig.

Nur das installieren des automatischen Dienstes / Tasks bereitet mit Kopfschmerzen. Wie würdet ihr das machen?

Wenn mir irgendjemand helfen kann, wäre ich sehr glücklich!!!

Vielen Dank und viele Grüße
riehol

U
189 Beiträge seit 2011
vor 11 Jahren

Ich bin mir zwar nicht sicher, aber beim Abmelden werden nur die Programme geschlossen, die der angemeldete Benutzer gestartet hat. Wenn also ein Prog gestartet wurde, das unter Systemrechten läuft, sollte es auch nach dem Abmelden noch aktiv sein. Vielleicht hilft dir das weiter. Frage wäre dann nur, wie man das Programm mit Systemrechten aus einem Dienst heraus startet.
Vielleicht weiß ja dazu jemand etwas.

C
2.122 Beiträge seit 2010
vor 11 Jahren

Wieso packst du nicht die Funktion an sich in den Dienst? Der muss doch dazu nicht das Programm aufrufen wenn er das selbst tun kann.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo riehol,

... entweder das, oder du packst zumindest die eigentliche Funktionalität des Programms in eine DLL, die du dann sowohl aus deiner MDI-Anwendung heraus aufrufen kannst, als auch aus einer Kommandozeilenanwendung, die ohne Benutzerinteraktion automatisch abläuft. Denn wenn kein Benutzer angemeldet ist, macht eine Anwendung mit GUI nur Probleme. Genauso wie das Starten einer Anwendung mit GUI aus einem Dienst heraus.

herbivore

R
riehol Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren

Ich habe die Funktionalität schon gekapselt und bin gerade dabei ein kleines Tool ohne GUI zu verfassen, das sollte auch klappen.

Aber mein Hauptproblem bleibt weiterhin, wie kann ich aus meinem Hauptprogramm heraus bestehende Parameter nehmen (Zeit und Intervall) und damit eine geplante Aufgabe erstellen die dann unabhängig davon, ob ein Benutzer angemeldet ist, oder nicht, mein Kommandozeilentool aufruft?

Danke schon einmal für die bestehenden Antworten!

Grüße
riehol

L
416 Beiträge seit 2008
vor 11 Jahren

Was mir so spontan einfällt:
Du könntest einen geplanten Task anlegen der sagen wir alle 15 Min ausgeführt wird, schaut ob er was zu tun hat, das erledigt und sich wieder beendet. Die Aufträge zum Zeitpunkt x was zu erledigen könntest in einer kleinen xml Datei ablegen die der Task ausliest.

106 Beiträge seit 2011
vor 11 Jahren

Hallo riehol,

ich würde, wie da anderen schon gesagt haben, die komplette funktionalität in einen Dienst legen.
Diesem Dienst solltest du dazu noch einen kleinen WCF-Service implementieren, der vom Hauptprogramm die einstellungen entgegen nimmt, wie Uhrzeit der automatischen ausführung, etc....
Ich würde sogar so weit gehen das die komplette Funktionalität nur im Dienst stattfindet und dein GUI-Programm nur die Schnittstelle dazu darstellt. Also wenn du ein Backup über deine Gui-Anwendung ausführen willst. Das diese den Auftrag an den Dienst schickt und er sie ausführt.

MfG
Rabban