2010-02-24 241 views
1

是否可以從Windows服務啓動Web瀏覽器?我在C#中創建了一項基本服務,並將其安裝在「LocalSystem」安全配置文件下。從Windows服務啓動Web瀏覽器

該服務的代碼如下:

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() 
     { 
     } 
    } 
} 

當服務運行時,沒有任何反應。關於windows服務的文檔說他們沒有任何UI,但這是否意味着啓動一個Web瀏覽器是不可能的。

+2

我很好奇你在努力完成什麼。你需要你的Windows服務與當前登錄的用戶進行交互嗎?如果是這樣,爲什麼它是一個Windows服務?當沒有用戶登錄時會發生什麼?爲什麼後臺服務需要與用戶交互?等等。 – jrista 2010-02-24 23:43:32

+0

你期待什麼發生?根據您運行的Windows版本,瀏覽器窗口可能會(也可能不會)不顯示。有一個服務提供的用戶界面是一個**糟糕的事情** ...谷歌「粉碎攻擊」 – Rob 2010-02-24 23:57:29

+0

我正在研究一個程序,將運行在後臺偵聽端口,將彈出一個互聯網瀏覽器和其他用戶界面時它接收某些命令。這聽起來像一個隱藏窗口的應用程序是要走的路。 – mon4goos 2010-04-06 00:09:19

回答

5

只有在XP和更低版本中才有可能。在Vista中,Windows服務完全在單獨的桌面上運行。您必須在用戶的桌面上運行某些內容才能完成此操作。

用一個隱藏窗口編寫一個應用程序,該窗口在啓動時作爲解決方法開始。

0

我不認爲這是可能的。我知道,如果你想運行Watin(在瀏覽器實例中運行的功能測試)不能從我的CI環境運行,如果這是作爲一個服務運行的,但只有它作爲一個應用程序運行。

0

我相信它可以完成,但您需要做額外的工作來處理進程隔離模型(窗口站和桌面)。看看這個頁面:Process Connection to a Window Station。既然你不能修改瀏覽器,你可能需要編寫一個shim來改變上下文,然後調用瀏覽器。

解決方法是將您的服務作爲交互式服務運行,但這已過時並且不適用於較新版本的Windows。

0

服務明確禁止與用戶交互。由於Vista的這個強制執行,看Interactive Services

重要服務不能直接 與用戶交互與Windows Vista的 的。因此,標題爲使用 交互式服務的部分中提到的技術 不應該在新代碼中使用 。

解決方案是將inteactive部分分成用戶會話啓動時啓動的正常進程(即啓動程序)。然後這個過程可以通過它選擇的IPC與服務進行通信(共享memeory,淨管道,TCP等)。該服務可以指導此過程在需要時啓動程序。