首先,我知道製作真正互動的Windows服務的some proper ways。在Windows服務中允許Windows-GUI調用(創建可見窗口等)嗎?
情況是,我確實有一個工具,並不是與用戶交互。然而,它確實顯示非阻塞通過彈出窗口和通過Windows通知區域(又名系統托盤)通知。它還會寫入它顯示的通知的日誌文件。
此工具通常是由主用戶應用程序產生的,只要主應用程序是普通應用程序,這些通知就會按預期工作。
當此工具由Windows服務產生時,自然不會顯示通知。 (該服務的桌面會話是不可見的。)但是,這將是好的,我們有日誌文件,這些通知只是 - 通知,在任何情況下用戶都絕對不能看到。現在
問題就變成:是一個過程,在「允許」服務(服務本身或啓動任何程序)的上下文中運行,以使該顯示可見GUI Windows API調用?
- 將大多數Windows API調用(例如創建和顯示一個窗口,使用Shell_NotifyIcon等)表現在服務的無形會議一樣嗎?
- 或者我需要確保整個源代碼中沒有GUI顯示/修改的東西在服務的上下文中調用?
是的,撥打::MessageBox是一個壞主意,因爲它會阻止。但我可以處理這些電話。
是的,這可能是更好的設計,但這是我目前所擁有的,如果我沒有撕開整個工具以確保沒有GUI相關的代碼在服務中運行,那將是很好的。
傳遞句子中的提示:[GUI調用會成功,但不會顯示GUI。](http://www.brianbondy.com/blog/id/100/) –
唯一的方法似乎是使用WTSEnumerateSessions和CreateProcessAsUser - 請參閱此文章[SO文章](http://stackoverflow.com/a/267866/1850797) –
@EdwardClements:感謝您的鏈接。但是請注意,我不*需要在服務上下文中運行時顯示GUI元素。我只是想知道*試圖*顯示非阻塞的GUI元素是否會引起Service的問題。 –