On Windows, Cursor’s update flow can fail with two separate, developer-facing error dialogs instead of one coordinated update:
File handle error — cannot replace C:\Users\Crafter\AppData\Local\Programs\cursor\Cursor.exe because another process holds the file.
Inno Setup error — “An installation is currently running” (CodeSetup-stable-3.9.16).
After failure, orphaned installer processes remain (CodeSetup-stable-3.9.16, CodeSetup-stable-3.9.16.tmp, inno_updater), blocking retries until the user kills them in Task Manager.
An IDE should use a single update path, ensure all Cursor processes exit before binary replacement, and show one clear recovery message—not raw file-handle errors.
Steps to reproduce
Run Cursor on Windows with auto-update (or trigger update in-app).
While Cursor is running, let auto-update run or launch CodeSetup-stable-*.exe manually.
For AI issues: which model did you use?
Model name (e.g., Sonnet 4, Tab…)
For AI issues: add Request ID with privacy disabled
Request ID: f9a7046a-279b-47e5-ab48-6e8dc12daba1
For Background Agent issues, also post the ID: bc-…
Additional Information
Add any other context about the problem here.
Does this stop you from using Cursor?
Yes - Cursor is unusable
Sometimes - I can sometimes use Cursor
No - Cursor works, but with this issue
The more details you provide, the easier it is for us to reproduce and fix the issue. Thanks!
Hey, thanks for the detailed report. The breakdown by processes and steps really helps.
This is a known issue on our side. During an update, orphaned processes like extra Cursor.exe, rg.exe, and stuck CodeSetup-* or inno_updater can keep handles on the install directory. That makes the binary swap fail, and then the second installer hits the Inno Setup mutex and shows installation already running. We’re tracking the issue, but I can’t share an exact ETA for a fix yet.
How to recover right now:
In Task Manager, end any stuck processes: CodeSetup-stable-*, inno_updater, and any extra Cursor.exe.
Reinstall Cursor from Cursor · Download. Your settings and extensions will be kept at %APPDATA%\Cursor and %USERPROFILE%\.cursor. Only the binary gets replaced.
To reduce the chance it happens again:
Fully quit Cursor before restarting or shutting down Windows, including the tray icon.
Don’t run CodeSetup manually while auto-update is running.
If this is a work machine, add %LOCALAPPDATA%\Programs\cursor to your AV or endpoint protection exclusions so it doesn’t hold file handles during the swap.
If you want to disable auto-update for now: Settings → search for update.mode → set it to none and update manually.
Let me know if the issue comes back after cleaning up the processes and reinstalling.