EasyService – 讓程序以 Windows 系統服務的方式,無窗口運行

EasyService 是一個只有 16KB 的小程序,它可以讓需要長時間運行的 Windows 程序,以系統服務的方式,無窗口后臺運行。典型的應用,比如命令行內網穿透 frp 工具、各種 Nodejs、Python 小工具。@Appinn

EasyService - 讓程序以 Windows 系統服務的方式,無窗口運行 1

有很多沒有圖形界面的程序,會使用 Windows 下的命令提示符界面,看起來…丑丑的,以及很礙事。

而 Windows 并沒有一個很方便的后臺運行方式,于是,利用系統服務來運行一些程序,就是一種非常優雅的使用方式了。

比如之前小眾軟件寫過的免費開源內網穿透工具 frp 教程。frp 可以讓你在不考慮公網 IP 的情況下, 隨時從外連接回家,使用 NAS、遠程桌面等服務,但 frp 會在桌面留下一個命令提示符。

EasyService - 讓程序以 Windows 系統服務的方式,無窗口運行 2

注意使用 frp 的前提意,需要一個公網 IP 作為中轉節點。這個節點可以是擁有固定公網 IP 的任意電腦,也可以自配一臺 VPS,青小蛙依舊推薦 Vultr 的機器,便宜好用,控制面板簡單。可以另外通過青小蛙的推薦鏈接注冊(??有返利),還送 50 刀體驗金,僅限新用戶。Vultr 推薦美國、德國的機器。

如果不嫌麻煩,也可以試試騰訊云的特價服務器,一年只需要 88 元,(推薦注冊地址 ?? 有返利),優點肯定是連接響應速度快了,但帶寬略小。

現在,我們就用 EasyService 把這個命令提示符窗口隱藏起來,讓它在后臺運行。

EasyService 教程

假設你已經看過 frp 教程,并成功設置了服務器與客戶端。下面就用 EasyService 將 frp 的 Windows 客戶端窗口隱藏起來。

配置文件

  1. 下載解壓縮 EasyService(19.8KB)
  2. 將 frp 客戶端放到 EasyService 文件夾
  3. 編輯 svc.conf 文件:
ServiceName: Frp Service
Worker: frpc.exe -c frpc.ini
WorkingDir: frp
OutFileDir: outfiles
WorkerEncoding: utf8

確保此時的 EasyService 文件夾有以下的幾個文件和文件夾:

  • frp 文件夾(包含配置文件)
  • svc.conf
  • svc.exe
EasyService - 讓程序以 Windows 系統服務的方式,無窗口運行 3

測試配置文件

然后,在 EasyService 文件夾的地址欄,直接輸入 cmd 打開當前文件夾的命令提示符,輸入測試命令:

svc.exe check
svc.exe test-worker

如果能看到下面的提示,就證明測試成功,沒有問題了。

EasyService - 讓程序以 Windows 系統服務的方式,無窗口運行 4

安裝系統服務

此時需要使用管理員權限的命令提示符(在開始菜單中搜索 cmd 然后右鍵以管理員身份運行)。切換至 EasyService 目錄(上圖為例 C:\TOOLS\easy-service-master):

cd C:\TOOLS\easy-service-master
svc.exe install
EasyService - 讓程序以 Windows 系統服務的方式,無窗口運行 5

啟動系統服務之后,frp 就已經開始運行了,即便用戶注銷也不會停止運行,且系統開機后、用戶登錄之前就會自動運行。在服務管理控制臺中可以查看已注冊的服務。

重啟、停止、刪除系統服務

只需要運行以下命令,即可:

  • svc stop 停止
  • svc start 開始
  • svc estart 重啟
  • svc remove 刪除

然后,就可以愉快的使用 frp 并且看不見那個煩人的窗口了。EasyService 在 GitHub 開源。

EasyService 原理

EasyService 實質是將自己(svc.exe)注冊為一個系統服務,此服務啟動時,會讀取 svc.conf 中的配置,創建一個子進程運行 Worker 中指定的程序及命令行參數,之后,監視該子進程,如果發現子進程停止運行,會重新啟動一個子進程。而當此服務停止時,會向子進程的標準輸入中寫入數據 “exit” ,并等待子進程退出,如果等待時間超過 10 秒,則直接終止子進程。

多個服務需要運行多個 EasyService。

其他的選擇

青小蛙在幾個月前還寫過一篇通過 nssm 工具實現同樣效果的教程:

EasyService - 讓程序以 Windows 系統服務的方式,無窗口運行 6

詳見這里:https://meta.appinn.net/t/frp/11319/3

27 條留言

  1. 紫羅星君 2019/11/14 回復
    • 青小蛙 2019/11/14 回復
  2. 程序熊 2019/11/14 回復
  3. SnowHertz 2019/11/14 回復
    • FrostSigh 2019/11/17 回復

寫留言

22选5走势图表