Starten von Web-Browser von Windows Service
-
22-09-2019 - |
Frage
Ist es möglich, einen Web-Browser von einem Windows-Dienst zu starten? Ich habe einen Basisdienst in C # erstellt und installiert sie unter dem „Localsystem“ Sicherheitsprofil.
Der Code für den Service sieht wie folgt aus:
namespace Bootloader
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
string target = "http://www.microsoft.com";
System.Diagnostics.Process.Start(target);
}
protected override void OnStop()
{
}
}
}
Wenn der Dienst ausgeführt wird, passiert nichts. Die Dokumentation zu Windows-Dienst sagen, dass sie haben keine UI, aber heißt das einen Web-Browser starten ist nicht möglich.
Lösung
Es ist möglich, nur in XP und niedriger. In Vista, führen Sie Windows Services auf einem separaten Desktop vollständig. Sie müssen etwas haben, in dem Desktop des Benutzers ausgeführt wird, dies zu erreichen.
Schreiben Sie eine App mit einem versteckten Fenster das beginnt beim Start als Behelfslösung.
Andere Tipps
Ich glaube nicht, dass dies möglich ist. Ich weiß, dass, wenn Sie Watin (funktionale Tests, die in einer Browser-Instanz ausgeführt wird) ausgeführt werden sollen können nicht aus meiner CI-Umgebung ausgeführt werden, wenn dies als Dienst ausgeführt wird, aber nur, wenn es läuft als App.
Ich glaube, es kann getan werden, aber Sie werden zusätzliche Arbeit, um mit dem Prozess Isolationsmodell (Arbeitsstationen und Desktops) beschäftigen tun müssen. Werfen Sie einen Blick auf diese Seite: Prozessanschluss an einem Fenster Station . Da Sie den Browser nicht ändern können, müssen Sie möglicherweise eine Shim schreiben, die den Kontext ändert und ruft dann den Browser.
Eine Abhilfe ist Ihren Dienst als interaktiven Dienst laufen, aber dies ist veraltet und wird nicht funktionieren in neueren Versionen von Windows.
Dienste sind ausdrücklich von der Interaktion mit dem Benutzer verboten. Da Vista dies erzwungen wird, finden Sie unter Interactive Services :
Wichtig: Dienste können nicht direkt Interaktion mit einem Benutzer als Windows Vista. Daher werden die Techniken in dem Abschnitt erwähnt betitelte Verwendung ein interaktiver Dienst sollte nicht in neuem Code verwendet wird.
Die Lösung ist das inteactive Teil in einen normalen Prozess zu trennen, die gestartet wird, wenn die Benutzersitzung beginnt (dh. Ein Start-Up-Programm). Dieser Prozess kann dann mit dem Dienst über seine IPC der Wahl (gemeinsam memeory, Netto-Rohre, TCP usw.) kommunizieren. Der Dienst kann diesen Prozess leitet Programme zu starten, wenn nötig.