Windows 服務程序、窗口界面與遠程桌面的那點事 |
發(fā)布時間: 2012/9/9 15:50:04 |
個人不喜歡服務端程序,以 Windows 操作系統(tǒng)作為運行平臺,但是,很多時候,迫于環(huán)境現(xiàn)狀,需要讓自己的程序?qū)崿F(xiàn)跨平臺。 在開發(fā)全新的金山游戲運營平臺時,發(fā)現(xiàn):雖然大部分游戲,服務端程序運行在 Linux 服務器,但是,仍有例外。幾款最近代理的游戲,服務端運行在 Windows 服務器上。西山居開發(fā)的游戲,服務端集群架構,既有 Windows 服務器,又有 Linux 服務器。
-------------------------------------------------------------------------------- 游戲運行系統(tǒng)的 Knose 程序,我最初是在 Linux 下開發(fā)的,后來才實現(xiàn)了兼容 Windows 的跨平臺版本。
-------------------------------------------------------------------------------- 在 Linux 下,Knose 為“父子進程+指令處理線程池+獨立功能多線程”結構;在 Windows 上,將 Knose 父子進程結構,拆分成了 knose_daemon.exe(Service 服務程序)和 knose.exe(主程序),由 knose_daemon.exe 啟動 knose.exe。
-------------------------------------------------------------------------------- 遇到了問題:按照運營維護需求,knose.exe 以及通過它啟動的游戲服務端進程,需要有“窗口界面”,顯示在桌面中。而 knose_daemon.exe 是以服務方式運行的,無窗口界面,knose_daemon.exe 啟動的 knose.exe,窗口界面沒有彈出來。 為了解決這個問題,我在 install.bat 中,用了 Windows 的 sc 命令,將 knose_daemon.exe 啟動為系統(tǒng)服務,“type= interact type= own”設置了“允許桌面與服務交互”。在本機(Windows XP SP3)測試,knose.exe 的窗口界面以及通過它啟動的游戲進程窗口界面,都彈出來了。
-------------------------------------------------------------------------------- 于是將程序發(fā)布到 Windows Server 2003 服務器上,遠程桌面連接上去,發(fā)現(xiàn) knose.exe 的窗口界面始終彈不出來。 后來,同事發(fā)現(xiàn),原來是“遠程桌面”惹的禍: 遠程桌面客戶端 mstsc 有一個 /console 參數(shù),模式等同于本地終端顯示器登錄,/console 不會去占用非 /console 遠程桌面,遠程桌面允許兩個正常連接和一個控制臺/console方式連接,并且正常連接和 /console 連接的桌面操作不能相互看見,只有通過 /console 參數(shù)遠程桌面連接到 Windows 2003 服務器,才能夠看到彈出的 knose.exe 窗口界面。 在 Windows XP SP3 以上版本,/console 參數(shù)改名為 /admin,需要用 mstsc /admin 啟動遠程桌面:
連上后,終于能夠看到由 knose_daemon.exe 啟動的 knose.exe 程序窗口,以及由 knose.exe 啟動的游戲服務端進程窗口了。
本文出自:億恩科技【mszdt.com】 |