Source — /opt/splice-src/agent/apply_windows.go

/opt/splice-src/agent/apply_windows.go

//go:build windows

package main

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
)

func applyConfig(iface, config string) error {
	dir := filepath.Join(os.Getenv("ProgramData"), "SpliceVPN")
	if err := os.MkdirAll(dir, 0700); err != nil {
		return err
	}
	path := filepath.Join(dir, iface+".conf")
	if err := os.WriteFile(path, []byte(config), 0600); err != nil {
		return err
	}
	exec.Command("wireguard.exe", "/uninstalltunnelservice", iface).Run()
	if out, err := exec.Command("wireguard.exe", "/installtunnelservice", path).CombinedOutput(); err != nil {
		return fmt.Errorf("installtunnelservice: %v: %s", err, out)
	}
	return nil
}