Repository navigation
Windows: in-app self-update downloads fine but the NSIS installer aborts after ~10.5 s without writing a single file #11848
Yuhanbravo
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Windows: in-app self-update downloads fine but the NSIS installer aborts after ~10.5 s without writing a single file
Summary
On Windows, the desktop in-app update downloads the new package and reaches the "install and
restart" step, the app quits, the NSIS installer process starts — and then it silently gives up
about 10.5 seconds later, before writing anything into the install directory. The app comes
back on the old version, the update is offered again, and the cycle repeats.
The update download is fine, the app-side update journal is clean (it ends at
quit-requestedwith no error state), and this is not a permission/UAC problem. The failure is in the handoff
between
quitAndInstall()and the NSIS installer.0.2.1-rc.3(manual NSIS install of the same package type)0.2.1-rc.5(nightly channel)%TEMP%\ns*.tmp($PLUGINSDIR) leftovers and an untouched install directoryprove the installer never got past initialization.
Environment
@deepseek-ai/dsh-desktop0.2.1-rc.3 (Electron 44.7.0, Node 24.21.0)nightly, feedhttps://download.deepseek.com/dsh-desk/feeds/win-x64/%LOCALAPPDATA%\Programs\DeepSeek Harness(HKCU uninstall entry,... /currentuser)%LOCALAPPDATA%\@deepseek-aidsh-desktop-updaterpending\deepseek-harness-0.2.1-rc.5-win-x64.exe(289,408,544 bytes, EV signature Valid)Steps to reproduce
Expected
The installer replaces the installation with 0.2.1-rc.5 and the app restarts on the new version.
Actual
quit-requested).Evidence
1. Update journal (
DSH_DESKTOP_UPDATE_JOURNAL_DIR)Captured attempt on 2026-11-02 (UTC; local time = UTC+8). The flow completes correctly on the app
side and ends at
quit-requested; there is noerrorstate:Next launch (30 min later) still reports
0.2.1-rc.3:Note the download completed in ~346 ms because the package was already cached from a previous
attempt — this is not a re-download problem.
2. The NSIS installer starts, then aborts during initialization
<local>\Temp\ns*.tmpis the installer's$PLUGINSDIR; a clean installer run deletes it. Everyfailed attempt leaves one behind, containing only the installer UI plugin
window-frame.dll—i.e. the installer was terminated/aborted before extracting any application files:
For the journaled attempt:
quit-requestedat 14:33:56.919 → installer starts at 14:33:57.419(+500 ms) → installer dies at 14:34:07.988 (10.57 s).
The ~10.5 s constant looks like the installer's "old app is still running / wait for it to exit"
loop (repeated ~500 ms sleeps), expiring and aborting. But the app had already requested quit
500 ms before the installer even started, so on this machine the old Electron process is either
still alive past the wait window or the check is a false positive.
3. Nothing is written to the install directory
resources\app.asar,DeepSeek Harness.exeandUninstall DeepSeek Harness.exeare all unchangedsince the last manual install. The update cache's differential baseline
installer.exeis stillthe 0.2.1-rc.3 installer (2026-10-29), and the HKCU uninstall entry still reports 0.2.1-rc.3.
4. Not a permission / elevation / AV problem
JONSBO-9900X\Yuhan, current user has FullControlrequestedExecutionLevel = asInvoker(no elevation needed)pending\update-info.jsonisAdminRightsRequired: falseCN="Hangzhou DeepSeek Artificial Intelligence Co., Ltd."(GlobalSign EV)So the update runs with the same privileges it would need for a normal per-user install and still
fails.
Analysis / hypothesis
DesktopUpdateCoordinator.install()callselectron-updater'squitAndInstall(true, true), whichspawns the installer before the app process exits:
For a per-user NSIS install that is the right command line, and the app-side state machine is
correct (journal ends at
quit-requested, no error). What fails is the installer's startup guard:it waits a fixed ~10 s for the previous
DeepSeek Harness.exeto disappear, then aborts during.onInit(leaving$PLUGINSDIRbehind and never touching$INSTDIR).Two plausible causes, both DSH-side:
app.quit()is requested; if the Electron mainprocess needs longer than the installer's wait window to fully exit (or the process lingers in a
"no window but still alive" state), the guard always expires. This matches the deterministic
10.56–10.68 s we see on every attempt.
a stale handle), which would have the same observable effect.
Either way the user gets no feedback:
update-downloaded/ready→ user confirms → app quits →installer aborts → next launch offers the same update again.
Suggested direction for a fix
deterministically (e.g.
app.exit(0)once the installer is spawned, or spawn a detached helperthat waits for the current PID to disappear and then runs the installer).
quitAndInstall()cannot complete, log the installer exitcode / failure and show "installation failed" instead of silently reverting to
available.Attachments
journal-2026-11-02T14-33-43Z-pid33304-install-attempt.jsonl— failed update attemptjournal-2026-11-02T15-04-11Z-pid3268-relaunch.jsonl— relaunch, still on the old versionevidence.txt— OS/version/ACL/cache/$PLUGINSDIR dumps referenced abovedsh-update-evidence.zip
All reactions