aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/manager/install.go
diff options
context:
space:
mode:
Diffstat (limited to 'manager/install.go')
-rw-r--r--manager/install.go18
1 files changed, 17 insertions, 1 deletions
diff --git a/manager/install.go b/manager/install.go
index f74fecf0..97772b21 100644
--- a/manager/install.go
+++ b/manager/install.go
@@ -15,6 +15,7 @@ import (
"golang.org/x/sys/windows"
"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/mgr"
+ "golang.zx2c4.com/wireguard/windows/l18n"
"golang.zx2c4.com/wireguard/windows/conf"
"golang.zx2c4.com/wireguard/windows/services"
@@ -164,7 +165,7 @@ func InstallTunnel(configPath string) error {
ServiceType: windows.SERVICE_WIN32_OWN_PROCESS,
StartType: mgr.StartAutomatic,
ErrorControl: mgr.ErrorNormal,
- Dependencies: []string{"Nsi", "TcpIp"},
+ Dependencies: []string{"Nsi", "Tcpip", "iphlpsvc", "dnscache"},
DisplayName: "WireGuard Tunnel: " + name,
SidType: windows.SERVICE_SID_TYPE_UNRESTRICTED,
}
@@ -175,6 +176,21 @@ func InstallTunnel(configPath string) error {
err = service.Start()
go trackTunnelService(name, service) // Pass off reference to handle.
+ if err == windows.ERROR_SERVICE_DEPENDENCY_FAIL {
+ for _, dependentName := range config.Dependencies {
+ dependentService := mgr.Service{Name: dependentName}
+ var serr error
+ dependentService.Handle, serr = windows.OpenService(m.Handle, windows.StringToUTF16Ptr(dependentService.Name), windows.SERVICE_QUERY_CONFIG)
+ if serr == nil {
+ cfg, serr := dependentService.Config()
+ dependentService.Close()
+ if serr == nil && cfg.StartType == mgr.StartDisabled {
+ err = errors.New(l18n.Sprintf("The %q service (%s) is disabled; please re-enable it.", cfg.DisplayName, dependentName))
+ break
+ }
+ }
+ }
+ }
return err
}