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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top