core: Chdir to executable location on Windows (#5115)

Since all Windows services are run from the Windows system directory,
make it easier for users by switching to our program directory right
after the start.
This commit is contained in:
Tobias Gruetzmacher 2022-10-04 19:04:02 +02:00 committed by GitHub
parent c28cd29fe7
commit 253d97c93d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -15,6 +15,9 @@
package caddy package caddy
import ( import (
"os"
"path/filepath"
"github.com/caddyserver/caddy/v2/notify" "github.com/caddyserver/caddy/v2/notify"
"golang.org/x/sys/windows/svc" "golang.org/x/sys/windows/svc"
) )
@ -24,6 +27,14 @@ func init() {
if err != nil || !isService { if err != nil || !isService {
return return
} }
// Windows services always start in the system32 directory, try to
// switch into the directory where the caddy executable is.
execPath, err := os.Executable()
if err == nil {
_ = os.Chdir(filepath.Dir(execPath))
}
go func() { go func() {
_ = svc.Run("", runner{}) _ = svc.Run("", runner{})
}() }()