Go installation
之後CMD 打 go version 確定安裝成功
建立程式碼檔案 main.go
|
package main
import ( "fmt" "net/http" "os/exec" )
// 設定安全金鑰,必須與你的 Linux PHP 網站一致 const SecurityToken = "你的自訂安全金鑰123"
func main() { // 1. 啟動伺服器路由 http.HandleFunc("/start", func(w http.ResponseWriter, r *http.Request) { token := r.URL.Query().Get("token") if token != SecurityToken { http.Error(w, "拒絕存取:金鑰錯誤", http.StatusForbidden) return }
// 執行 Windows 批次檔。/c 代表執行完後關閉 cmd 視窗,start 用於在新視窗開啟遊戲避免卡住 Go 程式 cmd := exec.Command("cmd", "/c", "start", "", "C:\\PalworldServer\\StartServer.bat") err := cmd.Start() if err != nil { w.Write([]byte(fmt.Sprintf("啟動失敗: %s", err.Error()))) return } w.Write([]byte("Palworld 伺服器啟動指令已成功發送")) })
// 2. 關閉伺服器路由 (使用 PowerShell 溫柔關閉,非暴力 Taskkill) http.HandleFunc("/stop", func(w http.ResponseWriter, r *http.Request) { token := r.URL.Query().Get("token") if token != SecurityToken { http.Error(w, "拒絕存取:金鑰錯誤", http.StatusForbidden) return }
// 使用 PowerShell 的 Stop-Process,這比 taskkill 溫柔,能觸發遊戲存檔機制 cmd := exec.Command("powershell", "-Command", "Stop-Process -Name 'PalServer-Win64-Shipping' -ErrorAction SilentlyContinue") err := cmd.Run() if err != nil { // 如果找不到進程,代表原本就沒開,一樣回傳成功 w.Write([]byte("已送出關服指令,或伺服器原本就未開啟")) return } w.Write([]byte("Palworld 伺服器已成功關閉並存檔")) })
// 監聽區域網路的所有 IP,Port 設定為 3000 fmt.Println("Palworld Windows 代理端已在 Port 3000 啟動...") err := http.ListenAndServe("0.0.0.0:3000", nil) if err != nil { fmt.Println("伺服器啟動失敗:", err) } } |
如何 建立 自訂安全金鑰
方法一:用鍵盤隨機亂打(最簡單快截)
你可以直接在鍵盤上英文字母、數字交替亂打,組成一組 32 個字元以上 的長密碼。
範例:
qetuopaldj3740vnb6g8f3xbmkfhslao
測試用的 test.bat
|
@echo off :: 設定編碼為 UTF-8,防止中文變成亂碼 chcp 65001 > null
echo =================================================== echo [測試中] Palworld 伺服器啟動指令已成功傳達到 Windows! echo =================================================== echo. echo 系統正在模擬遊戲伺服器啟動... echo.
:: 建立一個測試成功的文字檔,用來雙重確認 echo 伺服器於 %date% %time% 成功透過網頁啟動 > C:\PalworldServer\test_success.txt
:: 倒數 5 秒讓你看到視窗,隨後視窗會自動關閉 timeout /t 5
echo 測試完成,視窗即將關閉。 exit |
將 main.go 轉化做 exe
go build -o pal_agent.exe main.go
進階技巧:如何讓 Go 程式在 Windows 背景隱形執行?
如果你直接點兩下 pal_agent.exe,畫面上會留下一個黑色的 CMD 視窗。如果你希望它完全隱形,且 Windows 開機時自動在背景啟動,可以這樣做:
在
pal_agent.exe
同一
個
資料夾內,建立一個文字檔,命名為
start_agent.vbs
。
貼入以下內容(這會隱藏黑視窗):
vbs
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "pal_agent.exe", 0, False
請謹慎使用程式碼。
按下
Win + R
鍵,輸入
shell:startup
回車,這會打開
Windows
的「啟動」資料夾。
把這個
start_agent.vbs
檔案
建立捷徑
放到「啟動」資料夾內。以後
Windows
只要開機,這個
Go
代理程式就會自動在背景完全隱形運作!