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:
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?
Mein Blog: http://www.frickelblog.de
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...
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 🙂
Mein Blog: http://www.frickelblog.de
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...