Hallo, mal wieder was spezielles.
In meiner ASP.NET Anwendung möchte ich dem Admin die Möglichkeit geben, den Webserver (cassini) neu zu starten.
Ich habe auch eine Windows Forms Anwendung mit der das einwandfrei funktioniert, nur mit der ASP.NET Anwendung nicht.
Der Dienst wird zwar beendet, aber nicht mehr neu gestartet.
Der einzige Unterschied zwischen der Forms und ASP Anwendung der mir einfällt ist, daß die Forms Anwendung als Administrator bzw. als User mit Admin Rechten ausgeführt wird.
Die ASP Anwendung ja nicht.
Trotzdem ist es seltsam, daß der Dienst trotzdem gestoppt wird, also denke ich mir, daß es nicht daran liegt.
Eher daran, daß die ASP Anwendung den Dienst einstellt, sobald der Webserver auf der sie läuft beendet wird.
Ist ja auch mehr als logisch, aber die Funktion zum Stop und Start sollte doch trotzdem noch ausgeführt werden, auch ohne Webserver...ist ja Codebehind und hat nichts mit der Oberfläche zu tun...
Hängt das doch so zusammen?
Schon, gell?
Wie kann man das dann lösen?
Hier der Code:
public void RestartService(string serviceName, int timeoutMilliseconds)
{
ServiceController service = new ServiceController(serviceName);
try
{
int millisec1 = Environment.TickCount;
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
clog.WriteLine("--Service hier", false);
if (service.Status == ServiceControllerStatus.Running)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
}
// count the rest of the timeout
int millisec2 = Environment.TickCount;
timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1));
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch (Exception ex)
{
// ...
throw new Exception(ex.Message, ex.InnerException);
}
}
Edit: jetzt stimmt der Code
Hallo,
aber die Funktion zum Stop und Start sollte doch trotzdem noch ausgeführt werden, auch ohne Webserver...ist ja Codebehind und hat nichts mit der Oberfläche zu tun...
Nein, wenn der Webserver beendet wird wird gar nix mehr ausgeführt. Der CodeBehind läuft ja innerhalb des Webservers. Deswegen ist es klar, dass der Start-Befehl nicht mehr ausgeführt wird.
Du könntest eine Batch-Datei (.cmd) erstellen und den Dienst darüber stoppen und starten, indem Du sie mit Process.Start
ausführst:
net stop myServiceName
net start myServiceName
Eine Antwort auf den Request, mit dem Du den Dienst stoppst, wirst Du beim Client natürlich auch nicht erhalten.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Ja, ist ja eigentlich schon logisch.
Habe inzwischen eine .exe gebaut, welche ich per
System.Diagnostics.Process.Start(pfad);
aufrufe und die den Server neu startet...funzt.
Grüßle