From 253d97c93dce9a3365e67d0360b2e47dd165578e Mon Sep 17 00:00:00 2001 From: Tobias Gruetzmacher Date: Tue, 4 Oct 2022 19:04:02 +0200 Subject: [PATCH] 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. --- service_windows.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/service_windows.go b/service_windows.go index 6db29925..357c9ac8 100644 --- a/service_windows.go +++ b/service_windows.go @@ -15,6 +15,9 @@ package caddy import ( + "os" + "path/filepath" + "github.com/caddyserver/caddy/v2/notify" "golang.org/x/sys/windows/svc" ) @@ -24,6 +27,14 @@ func init() { if err != nil || !isService { 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() { _ = svc.Run("", runner{}) }()