Laden...

Ein Programm aus Windows-Dienst heraus starten.

Erstellt von Sclot vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.313 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 15 Jahren
Ein Programm aus Windows-Dienst heraus starten.

Hallo 🙂

Ich habe einen Windows dienst - dieser Läuft unter dem Konto "Administrator" (Lokaler Admin).
Für diesen Dienst habe ich eine kleine Winform-Anwendung geschrieben, welche das Update machen soll, wenn eins vorhanden ist.

zu den Deinst gehört auch eine GUI, die unter einem Anderen Benutzer (in meinem fall "Sven" - ist ein Domänen-Bneutzer) gestratet sein kann.

Folgender Ablauf soll bei einem Update Passieren:

  1. update.exe aufrufen (die windowm-Anwendung welche das Update ausführt)
  2. update.exe hält Dienst an und killt eventuell offene GUI bei allen benutzern
  3. update.exe startet dienst wieder

Der aufruf der update.exe geschiet in meinem Dienst so:


if (File.Exists(globalvar.AppDirectory + "\\daemon\\updater.exe"))
{
	System.Diagnostics.Process.Start(globalvar.AppDirectory + "\\daemon\\updater.exe");
}

In der update.exe halte ich den dienst dann so an:


ServiceController service_Daemon;
									
service_Daemon = new ServiceController("MeinDaemon");
if (service_Daemon.Status == ServiceControllerStatus.Running)
{
	InfoLog("updateinfo.txt", "daemon wird angehalten");
	service_Daemon.Stop();
	service_Daemon.WaitForStatus(ServiceControllerStatus.Stopped);
	InfoLog("updateinfo.txt", "daemon im status: STOP");
}
service_Daemon.Dispose();

Und die GUI kille ich so:


Process[] prozess_GUI = Process.GetProcessesByName("Daemon-Controller");
int anzahl_prozesse = prozess_GUI.Length;
for (int i = 0; i < anzahl_prozesse; i++)
{
	InfoLog("updateinfo.txt", "Prozess gefunden - wird gekillt");
	prozess_GUI[i].Kill();
}

Das sollte rein theoretisch alles so gehen.
Das problem ist aber wohl erstmal das der daemon die update.exe garnicht aufruft.

also denke ich, das System.Diagnostics.Process.Start in einem Dienst eventuell garnicht funktioniert?

Hat jemand eine Idee, wie man das anders lösen könnte?

3.971 Beiträge seit 2006
vor 15 Jahren

Process.Start sollte normal in Diensten funktionieren, einziger Unterschied, du kannst nicht mit relativen Pfaden arbeiten.

Das zweite Problem ist, bei Diensten gibt es keine Gui! Du kannst dir mit deinem Updater oder einer anderen Oberfläche nix anzeigen lassen. Wenn du mit deinem Dienst "interagieren" willst, musst du zwischen den beiden Anwendungen die gewünschten Daten beispielsweise mit Remoting/WCF, NamedPipes oder sonstigen austauschen

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 15 Jahren

Die Update GUI zeigt auch nichts an, die Updatet nur 🙂

Aber.. das mit den Pfaden ist ein guter punkt zum nachdenken.

Weil.. ich geb dem ja kein Verzeichnis mit indem er die update.exe ausführen soll.
ich packe das mal in ein ProcessStartInfo und probier das noch mal.

Danke für den Denkansatz 🙂

3.971 Beiträge seit 2006
vor 15 Jahren

Im folgenden Link steht das auch nochmal genauer mit dem Pfad. [FAQ] Pfad zur eigenen Anwendung (EXE) ermitteln

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...