2011-12-22 80 views
0

我在Windows服務中使用捕獲屏幕所有代碼都以win形式正常工作,但在返回黑色圖片的win服務中正常搜索並且找到this並嘗試查找「允許服務與桌面交互」(在服務屬性中),但沒有任何具有該名稱的屬性。有什麼想法嗎?我如何/在哪裏可以找到它?我使用Windows Server 2008 R2 SP1和VS2010和C#4,如果在這個版本中沒有任何屬性,我該怎麼辦?查找「允許服務與桌面交互」在Windows服務中檢查(在服務屬性中)

+0

可能的[windows服務(允許服務與桌面交互)]的重複](http://stackoverflow.com/questions/ 4237225/windows-service-allow-service-to-interact-with-desktop) – 2011-12-22 13:00:57

+1

這裏要問的真正問題是爲什麼[你認爲]你首先需要Windows服務。是的,您可以使用David的解決方案,並試圖讓IPC在標準的用戶模式應用程序和服務之間進行溝通,但幾乎沒有任何意義。只需創建*不顯示窗口的標準Windows應用程序*。從您的角度來看,您將擁有一項服務的所有好處,而不受限制。這確實是一個非常專業化的案例,其中有人確實需要Windows服務。我不知道爲什麼每個人都認爲他們這麼做。 – 2011-12-22 13:04:09

回答

1

要設置此屬性,您必須打開Windows服務管理,右鍵單擊您的服務並打開屬性。之後選擇「登錄」選項卡。當您的服務在本地系統下運行時,您可以選擇「允許服務與桌面交互」。

enter image description here

+1

Windows XP!那是十年前的事了。該複選框不起作用了。現在是升級到Windows的現代版本的時候了。 – 2011-12-22 12:58:38

+0

...在windows7上也是這樣的作品 – 2011-12-22 12:59:14

+2

@lmw你可以選擇win 7上的那個盒子,它只是不會做你認爲的事 – 2011-12-22 13:00:36

1

該設置是一個傳統的設置,不會解決你的問題。從Vista開始,您的服務無法訪問交互式桌面,您需要從交互式桌面上運行的標準應用程序執行屏幕捕獲。

您可以使用IPC機制在您的服務和桌面應用程序之間進行通信。您可以從服務中啓動此桌面應用程序,但要做到這一點相當棘手,正如解釋here

檢查「允許服務與桌面交互」僅僅意味着您可以調用交互式API函數而不會出錯。您無法訪問inreractive桌面。這個問題都源於Vista中引入的變化,意味着服務在隔離的會話中運行,會話0.