juicedata/juicefs · error

Failed to set RunAs value

Error message

Failed to set RunAs value: %s

What it means

Thrown when k.SetStringValue("RunAs", "LocalSystem") fails while configuring the WinFsp service's run-as account. For drive-letter mounts the library sets RunAs=LocalSystem so the launcher starts the service with system privileges; a failed write aborts registration because the service would run under the wrong account.

Solutions

  1. Run the mount elevated as Administrator so the RunAs value can be written.
  2. Verify the WinFsp\Services\juicefs-<alias> key exists; if the earlier steps succeeded it should — reinstall WinFsp if keys vanish.
  3. Check security software or Group Policy intercepting HKLM writes.
  4. Retry the mount after any WinFsp upgrade completes.

Example fix

// before (non-elevated)
> juicefs mount redis://... X:
// after
> Start-Process juicefs -ArgumentList 'mount','redis://...','X:' -Verb RunAs
Defensive patterns

Strategy: validation

Validate before calling

// confirm HKLM write access before service registration
_, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\WOW6432Node\WinFsp\Services`, registry.SET_VALUE)
if err != nil { return errors.New("run as Administrator") }

Try / catch

if err := mount(...); strings.Contains(err.Error(), "Failed to set RunAs") { /* run elevated, verify WinFsp\Services key, retry */ }

Prevention

When it happens

Trigger: Mounting as a network drive... precisely: asNetworkDrive == false and the RunAs registry write fails — insufficient privileges, missing service key, or registry access restrictions.

Common situations: Non-administrator shell registering a service; corporate policy blocking HKLM writes; WinFsp Services key deleted between the earlier writes and this one (uninstall race).

Understand the failure class

Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.

Related errors


AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06). Data as JSON: /api/errors/69e6d610723e50fc. Report an issue: GitHub.

Appendix: source

Thrown at pkg/winfsp/winfs.go:1256

	}

	if logPath != "" {
		err = k.SetStringValue("Stderr", logPath)
		if err != nil {
			return fmt.Errorf("Failed to set registry key: %s", err)
		}
	} else {
		err = k.DeleteValue("Stderr")
		if err != nil {
			return fmt.Errorf("Failed to delete registry key: %s", err)
		}
	}

	// RunAs NetworkService/LocalSystem
	if !asNetworkDrive {
		err = k.SetStringValue("RunAs", "LocalSystem")
		if err != nil {
			return fmt.Errorf("Failed to set RunAs value: %s", err)
		}
	} else {
		k.DeleteValue("RunAs")
	}

	//  SET "HKLM\\SOFTWARE\\WOW6432Node\\WinFsp\\MountBroadcastDriveChange" to 1
	k2, err := registry.OpenKey(registry.LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\WinFsp", registry.ALL_ACCESS)
	if err != nil {
		logger.Warningf("Failed to open registry key for MountBroadcastDriveChange: %s", err)
	} else {
		defer k2.Close()
		err = k2.SetDWordValue("MountBroadcastDriveChange", 1)
		if err != nil {
			logger.Warningf("Failed to set MountBroadcastDriveChange value: %s", err)
		}
	}

	return nil

View on GitHub (pinned to c9a67b23e8)