47 lines
790 B
Go
47 lines
790 B
Go
package utils
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
|
|
"github.com/iwind/TeaGo/Tea"
|
|
)
|
|
|
|
type ServiceManager struct {
|
|
Name string
|
|
Description string
|
|
|
|
onceLocker sync.Once
|
|
}
|
|
|
|
func NewServiceManager(name, description string) *ServiceManager {
|
|
manager := &ServiceManager{
|
|
Name: name,
|
|
Description: description,
|
|
}
|
|
manager.resetRoot()
|
|
return manager
|
|
}
|
|
|
|
func (m *ServiceManager) setup() {
|
|
m.onceLocker.Do(func() {})
|
|
}
|
|
|
|
func (m *ServiceManager) resetRoot() {
|
|
if !Tea.IsTesting() {
|
|
exePath, err := os.Executable()
|
|
if err != nil {
|
|
exePath = os.Args[0]
|
|
}
|
|
link, err := filepath.EvalSymlinks(exePath)
|
|
if err == nil {
|
|
exePath = link
|
|
}
|
|
fullPath, err := filepath.Abs(exePath)
|
|
if err == nil {
|
|
Tea.UpdateRoot(filepath.Dir(filepath.Dir(fullPath)))
|
|
}
|
|
}
|
|
}
|