2012-07-12 28 views
1

我的Windows服務調用WTSEnumerateProcesses()時,偶爾會報告以下錯誤:WTSEnumerateProcesses和Terminal Services服務

綁定句柄無效。

即使我已將終端服務服務註冊爲我的服務的從屬服務,但由於無法使用終端服務服務,我懷疑這是由此造成的。

我相信即使終端服務服務正在運行,它還沒有完成初始化(或正在關閉),並且無法處理任何請求,從而導致錯誤。

我注意到參考文檔中的以下爲WTSRegisterSessionNotification()

當設置全局\ TermSrvReadyEvent全球性事件,所有相關的服務工作已經開始,這個函數可以成功調用。

這不會出現在WTSEnumerateProcesses()的文檔中,但它是否同樣適用?意思是OpenEvent()Global\\TermSrvReadyEvent上的嘗試將表明終端服務服務實際上可用?


平臺:Windows XP,Windows Vista和Windows 7

+0

假設聽起來很合理,但您應該等待事件的正確性,而不是僅僅檢查它是否存在。 – 0xC0000022L 2012-07-12 13:55:59

+0

@ 0xC0000022L,是的,那就是我的意思。這聽起來像是我,但我只是想確定。 – hmjd 2012-07-12 13:58:15

+1

@hmjd:只是好奇,如果你曾經在XP以外的操作系統上觀察過這個?在我的測試中,我只能在大多數WTS * API中的Windows XP上啓動後立即看到此錯誤。這似乎已在Vista和更高版本的操作系統下得到修復。 – c00000fd 2015-11-17 05:24:07

回答

0

你一定要OpenEvent(SYNCHRONIZE, false, L"Global\\TermSrvReadyEvent"),等待它。

全部WTS*函數通過RPC在C API(see the runtime interface protocol)的引擎下調用終端服務服務(現在稱爲遠程桌面服務服務)。

與c00000fd經歷的相反,我從未遇到過使用標準用戶帳戶的問題,並且在Windows 7及更高版本上說過事件對象。

相關問題