2012-02-05 317 views
3

我有一個Windows服務託管的WCF服務。通過WCF打開IE瀏覽器

該服務的WCF有一個metohd在這個方法我有一個重要防線:

Process Browser = Process.Start("iexplore.exe", hostUrl); 

我安裝Windows服務作爲本地系統,但是當我試圖調用該方法,似乎一切執行,除了一個重要的行...和IE沒有打開。

我想補充一點,方法本身是不是在服務本身,而是在服務dll引用

任何想法,爲什麼一個?爲了得到最好的服務,以實際顯示的UI

+1

搜索互聯網「會話0隔離」。那會讓你開始正確的方向。 – 2012-02-05 02:27:48

+0

你想通過打開IE來實現什麼?這是否可以更好地使用'WebClient' /'HttpWebRequest'和'HtmlAgilityPack'完成? – 2012-02-05 03:50:53

+0

我打開的URL應該打開我IE附加組件 – MoShe 2012-02-05 07:38:17

回答

3

由於Windows Vista MS已經添加了很多與安全相關的已更改的esp。在Windows服務可以/不可以做的地區。任何「像桌面一樣」(打印,訪問網絡共享,使用Office Interop等)更難以工作。

你應該重新考慮你的設計,因爲恕我直言,任何「類似服務器的進程」(例如一個WCF服務)可以被多個請求並行訪問,因此不應該使用不是爲這種類型的交互設計的進程。 。如果你的web服務以這種方式啓動多個IE實例,會發生什麼? IE會像你需要/期望的那樣行事嗎?

如果你真的真的必須這樣做,你應該有

  • 託管WCF服務

OR

  • 兩個進程正常的桌面進程,一個你的Windows服務和一個作爲正常的桌面進程運行處理IE ...這兩個進程通過IPC
4

http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/63a7d1ec-7077-489a-a250-f7422f04317b

「,你必須設置在計算機管理的服務,使其能夠與桌面交互。在計算機管理服務窗口,轉到您的服務的屬性,並在登錄選項卡上,選中「允許服務與桌面交互」

+0

我做到了,但仍然無法打開IE – MoShe 2012-02-05 02:33:38

+0

我將服務權限更改爲「允許服務與桌面交互」但仍然無法打開IE – MoShe 2012-02-05 11:07:31

1

在用戶正在運行的服務?嘗試在當前登錄的用戶下運行它,並有權與桌面進行交互,並查看是否有幫助。

一般來說,讓服務啓動GUI進程並不是一個好主意。例如,如果沒有人登錄,該怎麼辦?如果很多人登錄會怎麼樣?它是否應該在所有會話中打開...等等。您是否考慮過在您的服務中公開一個簡單的(例如Net.NamedPipes)端點,並編寫一個小型客戶端UI來與其交互?