chenhg5/cc-connect · error

cannot detect binary path: %w

Error message

cannot detect binary path: %w

What it means

daemon.Resolve fills in defaults for the daemon service config. When cfg.BinaryPath is empty, it calls os.Executable(); if the OS cannot determine the current executable's path (os.Executable returns an error), this error wraps that failure.

Source

Thrown at daemon/manager.go:124

	if err := json.Unmarshal(data, &m); err != nil {
		return nil, err
	}
	return &m, nil
}

func RemoveMeta() {
	os.Remove(metaPath())
}

func NowISO() string {
	return time.Now().Format(time.RFC3339)
}

func Resolve(cfg *Config) error {
	if cfg.BinaryPath == "" {
		exe, err := os.Executable()
		if err != nil {
			return fmt.Errorf("cannot detect binary path: %w", err)
		}
		real, err := filepath.EvalSymlinks(exe)
		if err == nil {
			exe = real
		}
		cfg.BinaryPath = exe
	}
	if cfg.WorkDir == "" {
		wd, err := os.Getwd()
		if err != nil {
			return fmt.Errorf("cannot detect working directory: %w", err)
		}
		cfg.WorkDir = wd
	}
	if cfg.LogFile == "" {
		cfg.LogFile = DefaultLogFile()
	}
	if cfg.LogMaxSize <= 0 {

View on GitHub (pinned to 4000b2338a)

Solutions

  1. Set BinaryPath explicitly in the daemon Config (e.g. /usr/local/bin/cc-connect) so detection is skipped.
  2. Ensure /proc is mounted if running in a container (Linux relies on /proc/self/exe).
  3. Reinstall or restore the binary so the running executable exists on disk.
  4. Retry the install from a normally launched shell.

Example fix

// before
cfg := &daemon.Config{} // BinaryPath empty, detection fails
// after
cfg := &daemon.Config{BinaryPath: "/usr/local/bin/cc-connect"}
Defensive patterns

Strategy: fallback

Validate before calling

if _, err := os.Executable(); err != nil && cfg.BinaryPath == "" {
    return fmt.Errorf("set BinaryPath explicitly: %v", err)
}

Try / catch

if err := daemon.Resolve(cfg); err != nil {
    if strings.Contains(err.Error(), "cannot detect binary path") {
        cfg.BinaryPath = "/usr/local/bin/cc-connect" // explicit fallback
        err = daemon.Resolve(cfg)
    }
    if err != nil { return err }
}

Prevention

When it happens

Trigger: Calling Resolve with a Config whose BinaryPath is empty on a system where os.Executable() fails — e.g. the binary was deleted/replaced while running, or an exotic environment (procfs unavailable, some containers) where /proc/self/exe cannot be resolved.

Common situations: Installing the daemon from a temporary binary that was deleted after start; running in a minimal/restricted container where /proc is not mounted; unusual launch mechanisms that break executable path detection.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06). Data as JSON: /api/errors/ddad5044088e74f6. Report an issue: GitHub.