- 問題描述:
歷史、個人以及種種原因,導致必須要在我的電腦中運行某一個bat,才可以讓其它的同事正常的使用某一個工具。而該工具版本的發布頻率可以用電動小馬達來形容,總之,就是每天我需要花20%左右的時間來處理這個事情。 - 迫切需求:
- 希望可以讓其它同事遠程運行我電腦中的bat,解放我的時間以便用來做其它更有“意義”的事情。
- 希望把bat的運行結果顯示在網頁上
- 希望同時只能處理一個bat的調用請求
- 希望后臺服務器是靜默運行的
- 解決思路
用web來實現,即在本地開一個web服務器,處理其它人的請求(有點殺雞用牛刀的感覺) - 需求解決
- 先是試著用sinatra,確實更適合,但之前從沒用過,遇到就一點小問題果斷縮了,所以改成用rails(好吧,確實用了把牛刀),通過在controller中調用系統命令
system "xxx.bat"
,可以解決第一個需求。 - 但
system "xxx.bat"
的返回結果是false或者true
,無法把bat的運行結果顯示在網頁上,所以改用%x(xxx.bat)
,然而發現返回的內容顯示為亂碼,所以還要換編碼,然后返回的內容在網頁上顯示還不會自動換行,最后就改成了這樣:%x(xxx.bat).encode('utf-8', 'gb2312').split("\n")
,得到一個數組,然后在view中處理顯示。 - 還需要同時只處理一個bat的調用請求,在controller中直接用cmd命令判斷
system "tasklist|findstr /i /c:\"running_process_name\""
,如果返回值為true,那么就返回給view一個提示,不做調用bat的處理。 - 試了很多方法,想讓rails服務器的窗口在windows下后臺運行。首先是用SrvanyUI來注冊了一個服務,發現會經常性的出錯,原因不明,后來就想靜默啟動,先是創建了一個
start.bat
用來處理一些意外的情況以及啟動服務器,然后新建了一個start.vbe的文件,內容如下:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start.bat",0
最后把vbe文件設置成啟動運行。
算是告一段落。
遺留問題:
- 只能等bat運行完以后才能看到運行結果,不能即時看運行結果。
- rails啟動的還是開發環境,不過極小范圍使用,還算可以接受。
- 我覺得用sinatra應該更好。。。或許python更適合。。。
- 建議windows下安裝rails時,建議用
gem install rails --no-ri --no-doc
,另外安裝rails時需要先安裝devkit
這個工具在官網可以下載到。