Fixed: update Xray Core on Windows
Some checks are pending
Release 3X-UI / build (386) (push) Waiting to run
Release 3X-UI / build (amd64) (push) Waiting to run
Release 3X-UI / build (arm64) (push) Waiting to run
Release 3X-UI / build (armv5) (push) Waiting to run
Release 3X-UI / build (armv6) (push) Waiting to run
Release 3X-UI / build (armv7) (push) Waiting to run
Release 3X-UI / build (s390x) (push) Waiting to run
Release 3X-UI / Build for Windows (push) Waiting to run

This commit is contained in:
mhsanaei 2025-09-10 21:12:37 +02:00
parent 2401c99817
commit 82ddd10627
No known key found for this signature in database
GPG key ID: D875CD086CF668A0
3 changed files with 39 additions and 18 deletions

View file

@ -95,7 +95,7 @@ func GetLogFolder() string {
return logFolderPath return logFolderPath
} }
if runtime.GOOS == "windows" { if runtime.GOOS == "windows" {
return getBaseDir() return filepath.Join(".", "log")
} }
return "/var/log" return "/var/log"
} }

View file

@ -8,6 +8,7 @@ import (
"os" "os"
"os/exec" "os/exec"
"regexp" "regexp"
"runtime"
"sort" "sort"
"time" "time"
@ -40,11 +41,17 @@ func (j *CheckClientIpJob) Run() {
isAccessLogAvailable := j.checkAccessLogAvailable(iplimitActive) isAccessLogAvailable := j.checkAccessLogAvailable(iplimitActive)
if iplimitActive { if iplimitActive {
if f2bInstalled && isAccessLogAvailable { if runtime.GOOS == "windows" {
shouldClearAccessLog = j.processLogFile() if isAccessLogAvailable {
shouldClearAccessLog = j.processLogFile()
}
} else { } else {
if !f2bInstalled { if f2bInstalled && isAccessLogAvailable {
logger.Warning("[LimitIP] Fail2Ban is not installed, Please install Fail2Ban from the x-ui bash menu.") shouldClearAccessLog = j.processLogFile()
} else {
if !f2bInstalled {
logger.Warning("[LimitIP] Fail2Ban is not installed, Please install Fail2Ban from the x-ui bash menu.")
}
} }
} }
} }

View file

@ -12,6 +12,7 @@ import (
"net/http" "net/http"
"os" "os"
"os/exec" "os/exec"
"path/filepath"
"runtime" "runtime"
"strconv" "strconv"
"strings" "strings"
@ -376,6 +377,8 @@ func (s *ServerService) downloadXRay(version string) (string, error) {
switch osName { switch osName {
case "darwin": case "darwin":
osName = "macos" osName = "macos"
case "windows":
osName = "windows"
} }
switch arch { switch arch {
@ -419,19 +422,23 @@ func (s *ServerService) downloadXRay(version string) (string, error) {
} }
func (s *ServerService) UpdateXray(version string) error { func (s *ServerService) UpdateXray(version string) error {
// 1. Stop xray before doing anything
if err := s.StopXrayService(); err != nil {
logger.Warning("failed to stop xray before update:", err)
}
// 2. Download the zip
zipFileName, err := s.downloadXRay(version) zipFileName, err := s.downloadXRay(version)
if err != nil { if err != nil {
return err return err
} }
defer os.Remove(zipFileName)
zipFile, err := os.Open(zipFileName) zipFile, err := os.Open(zipFileName)
if err != nil { if err != nil {
return err return err
} }
defer func() { defer zipFile.Close()
zipFile.Close()
os.Remove(zipFileName)
}()
stat, err := zipFile.Stat() stat, err := zipFile.Stat()
if err != nil { if err != nil {
@ -442,19 +449,14 @@ func (s *ServerService) UpdateXray(version string) error {
return err return err
} }
s.xrayService.StopXray() // 3. Helper to extract files
defer func() {
err := s.xrayService.RestartXray(true)
if err != nil {
logger.Error("start xray failed:", err)
}
}()
copyZipFile := func(zipName string, fileName string) error { copyZipFile := func(zipName string, fileName string) error {
zipFile, err := reader.Open(zipName) zipFile, err := reader.Open(zipName)
if err != nil { if err != nil {
return err return err
} }
defer zipFile.Close()
os.MkdirAll(filepath.Dir(fileName), 0755)
os.Remove(fileName) os.Remove(fileName)
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR|os.O_TRUNC, fs.ModePerm) file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR|os.O_TRUNC, fs.ModePerm)
if err != nil { if err != nil {
@ -465,11 +467,23 @@ func (s *ServerService) UpdateXray(version string) error {
return err return err
} }
err = copyZipFile("xray", xray.GetBinaryPath()) // 4. Extract correct binary
if runtime.GOOS == "windows" {
targetBinary := filepath.Join("bin", "xray-windows-amd64.exe")
err = copyZipFile("xray.exe", targetBinary)
} else {
err = copyZipFile("xray", xray.GetBinaryPath())
}
if err != nil { if err != nil {
return err return err
} }
// 5. Restart xray
if err := s.xrayService.RestartXray(true); err != nil {
logger.Error("start xray failed:", err)
return err
}
return nil return nil
} }