zed-industries/zed · error

failed to start installer: {:?}

Error message

failed to start installer: {:?}

What it means

Windows install step: the downloaded installer is executed with `/verysilent /update=true /MERGETASKS=!desktopicon`; a non-zero exit code fails with the installer's stderr. The helper path (auto_update_helper.exe) is only returned on success.

Source

Thrown at crates/auto_update/src/auto_update.rs:1280

        .parent()
        .context("No parent dir for Zed.exe")?
        .to_owned();

    // keep in sync with crates/auto_update_helper/src/updater.rs
    _ = smol::fs::remove_dir(parent.join("updates")).await;
    _ = smol::fs::remove_dir(parent.join("install")).await;
    _ = smol::fs::remove_dir(parent.join("old")).await;

    Ok(())
}

async fn install_release_windows(downloaded_installer: &Path) -> Result<Option<PathBuf>> {
    let mut cmd = new_command(downloaded_installer);
    cmd.arg("/verysilent")
        .arg("/update=true")
        .arg("/MERGETASKS=!desktopicon");
    let output = cmd.output().await?;
    anyhow::ensure!(
        output.status.success(),
        "failed to start installer: {:?}",
        String::from_utf8_lossy(&output.stderr)
    );
    // We return the path to the update helper program, because it will
    // perform the final steps of the update process, copying the new binary,
    // deleting the old one, and launching the new binary.
    let helper_path = std::env::current_exe()?
        .parent()
        .context("No parent dir for Zed.exe")?
        .join("tools")
        .join("auto_update_helper.exe");
    Ok(Some(helper_path))
}

pub async fn finalize_auto_update_on_quit() {
    let Some(installer_path) = std::env::current_exe()
        .ok()

View on GitHub (pinned to bc538def45)

Solutions

  1. Retry the update; transient installer exits (locked files) often clear.
  2. Run the downloaded installer manually from the installer temp dir to see its UI error.
  3. Whitelist Zed in antivirus/endpoint protection.
  4. Ensure the user can write to the install directory or reinstall per-user.
Defensive patterns

Strategy: retry

Validate before calling

anyhow::ensure!(downloaded_installer.exists(), "installer binary missing");
if is_process_running("Zed-setup.exe") {
    // wait or terminate before launching a second silent install
}

Try / catch

on "failed to start installer", retry once after other installer instances exit; if antivirus is suspected, prompt to whitelist and re-run; as a last resort, launch the installer UI manually to read the error.

Prevention

When it happens

Trigger: The Inno Setup installer exits non-zero - elevation denied for the install location, antivirus blocking the new installer binary, another installer instance running, or a corrupted download.

Common situations: Antivirus quarantining the freshly downloaded installer; insufficient privileges writing to the install dir; a previous Zed installer still running; partial download.

Related errors


AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16). Data as JSON: /api/errors/54971d2aadcd5ec9. Report an issue: GitHub.