2012-07-19 59 views
4

我到處搜索並試用了所有內容,我開始認爲這是不可能的。 我有一個服務運行在會話0(win7)作爲SYSTEM.I需要啓動一個外部應用程序。如果我簡單地啓動外部應用程序作爲SYSTEM,應用程序啓動,我可以看到GUI(如果我點擊使用UI0Detect會話0)。除了能夠看到它之外,啓動應用程序的服務實際上可以拍攝GUI的屏幕截圖並將其發送回我的服務器。 - 在這一點上都很好。試圖在會話0中顯示GUI

問題 - 有些情況下外部應用程序不允許在SYSTEM環境下運行。在這些情況下,我必須以不同的用戶身份啓動。我有另一個服務作爲Session 0中的實際用戶運行。然後,以這個其他用戶的身份啓動外部應用程序。外部應用程序在會話0中啓動,並指定WinSta0 \ Default以確保應用程序GUI在我的SYSTEM服務可以看到的同一臺桌面上啓動。當這種情況發生時,UI0Detect彈出,給我的印象是我會點擊並看到我的窗口。當我回到會話0或當我的服務嘗試一個屏幕截圖時,只有一個小黑框。這幾乎就像SYSTEM帳戶可以在會話0中渲染窗口 - 這是真的嗎?任何人都知道在會話0中運行的用戶帳戶是否能夠呈現GUI?

我不在尋找關於如何從會話0啓動應用程序到活動用戶桌面的代碼。這是有據可查的。我需要知道的是如何取消逆轉(排序)。我需要從SYSTEM以外的帳戶在會話0中啓動GUI。

+1

你爲什麼要這麼做?服務可以在沒有可視化桌面的情況下運行 - 在這種情況下,任何視覺都不會出現,用戶也無法與UI進行交互。在這種情況下你會怎麼做? – 2012-07-19 18:42:07

回答

2

MSDN:「如果服務類型指定了SERVICE_INTERACTIVE_PROCESS,則該服務必須在LocalSystem帳戶中運行。」

所以沒有支持的方式來做你想做的事情。但是,通過獲得以SYSTEM身份運行的服務來更改有問題的桌面(也可能是窗口站)的權限,也許可以使其運行。請記住,以這種方式共享桌面意味着如果應用程序或有問題的用戶帳戶受到威脅,它可能會損害系統帳戶。

或者,您可以嘗試在會話0(具有適當的權限)下創建一個新桌面並在該應用程序中啓動該應用程序。我不確定交互式用戶是否能夠看到此桌面,但是您可以通過在同一臺桌面上啓動另一個應用程序(最好在相同的用戶環境下)以截圖的形式截取屏幕截圖。

+0

我很確定我會得到這個答案。至少現在我可以停止想知道了。非常酷的Windows編程學習經驗。 – 2012-07-21 14:26:34