mirror of
https://github.com/qingchencloud/cftunnel.git
synced 2026-08-29 02:32:37 +08:00
f42915abd1
- 便携模式:程序同级目录放 portable 空文件,配置/bin/日志/PID 全部就地存储 - Windows 版本检测:启动时检测 OS 版本,低于 Win10 友好提示退出 - install 命令便携模式下拒绝注册系统服务 - reset 命令便携模式下安全清理(不删程序自身) - pidFile 包级变量改为函数调用,消除初始化时序隐患 Closes #8
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/qingchencloud/cftunnel/internal/config"
|
|
"github.com/qingchencloud/cftunnel/internal/daemon"
|
|
"github.com/qingchencloud/cftunnel/internal/service"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(installCmd)
|
|
rootCmd.AddCommand(uninstallCmd)
|
|
}
|
|
|
|
var installCmd = &cobra.Command{
|
|
Use: "install",
|
|
Short: "注册为系统服务(开机自启)",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
if config.Portable() {
|
|
return fmt.Errorf("便携模式下不支持注册系统服务(路径不固定),请使用 cftunnel up 手动启动")
|
|
}
|
|
cfg, err := config.Load()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if cfg.Tunnel.Token == "" {
|
|
return fmt.Errorf("请先运行 cftunnel init && cftunnel create <名称>")
|
|
}
|
|
binPath, err := daemon.EnsureCloudflared()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
svc := service.New()
|
|
if err := svc.Install(binPath, cfg.Tunnel.Token); err != nil {
|
|
return fmt.Errorf("注册服务失败: %w", err)
|
|
}
|
|
fmt.Println("系统服务已注册,隧道将开机自启")
|
|
return nil
|
|
},
|
|
}
|
|
|
|
var uninstallCmd = &cobra.Command{
|
|
Use: "uninstall",
|
|
Short: "卸载系统服务",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
svc := service.New()
|
|
if err := svc.Uninstall(); err != nil {
|
|
return fmt.Errorf("卸载服务失败: %w", err)
|
|
}
|
|
fmt.Println("系统服务已卸载")
|
|
return nil
|
|
},
|
|
}
|