打不開的exe服務(wù) 淺談Windows遠程桌面的那點事
[文章作者:張宴 本文版本:v1.0 ***修改:2011.06.28 轉(zhuǎn)載請注明原文鏈接:http://blog.s135.com/windows_mstsc/]
個人不喜歡服務(wù)端程序,以 Windows 操作系統(tǒng)作為運行平臺,但是,很多時候,迫于環(huán)境現(xiàn)狀,需要讓自己的程序?qū)崿F(xiàn)跨平臺。
在開發(fā)全新的金山游戲運營平臺時,發(fā)現(xiàn):雖然大部分游戲,服務(wù)端程序運行在 Linux 服務(wù)器,但是,仍有例外。幾款最近代理的游戲,服務(wù)端運行在 Windows 服務(wù)器上。西山居開發(fā)的游戲,服務(wù)端集群架構(gòu),既有 Windows 服務(wù)器,又有 Linux 服務(wù)器。
游戲運行系統(tǒng)的 Knose 程序,我最初是在 Linux 下開發(fā)的,后來才實現(xiàn)了兼容 Windows 的跨平臺版本。
在 Linux 下,Knose 為“父子進程+指令處理線程池+獨立功能多線程”結(jié)構(gòu);在 Windows 上,將 Knose 父子進程結(jié)構(gòu),拆分成了 knose_daemon.exe(Service 服務(wù)程序)和 knose.exe(主程序),由 knose_daemon.exe 啟動 knose.exe。
遇到了問題:按照運營維護需求,knose.exe 以及通過它啟動的游戲服務(wù)端進程,需要有“窗口界面”,顯示在桌面中。而 knose_daemon.exe 是以服務(wù)方式運行的,無窗口界面,knose_daemon.exe 啟動的 knose.exe,窗口界面沒有彈出來。
為了解決這個問題,我在 install.bat 中,用了 Windows 的 sc 命令,將 knose_daemon.exe 啟動為系統(tǒng)服務(wù),“type= interact type= own”設(shè)置了“允許桌面與服務(wù)交互”。在本機(Windows XP SP3)測試,knose.exe 的窗口界面以及通過它啟動的游戲進程窗口界面,都彈出來了。
@echo off sc create "KingeyesKnose" binPath= "%CD%\knose_daemon.exe" DisplayName= "Kingeyes Knose Daemon" start= auto type= interact type= own sc description KingeyesKnose "金山游戲運營系統(tǒng) KingEyes Knose 守護進程。" sc start KingeyesKnose
于是將程序發(fā)布到 Windows Server 2003 服務(wù)器上,遠程桌面連接上去,發(fā)現(xiàn) knose.exe 的窗口界面始終彈不出來。
后來,同事發(fā)現(xiàn),原來是“遠程桌面”惹的禍:
遠程桌面客戶端 mstsc 有一個 /console 參數(shù),模式等同于本地終端顯示器登錄,/console 不會去占用非 /console 遠程桌面,遠程桌面允許兩個正常連接和一個控制臺/console方式連接,并且正常連接和 /console 連接的桌面操作不能相互看見,只有通過 /console 參數(shù)遠程桌面連接到 Windows 2003 服務(wù)器,才能夠看到彈出的 knose.exe 窗口界面。
在 Windows XP SP3 以上版本,/console 參數(shù)改名為 /admin,需要用 mstsc /admin 啟動遠程桌面:
連上后,終于能夠看到由 knose_daemon.exe 啟動的 knose.exe 程序窗口,以及由 knose.exe 啟動的游戲服務(wù)端進程窗口了。
【編輯推薦】