Claude Desktop MSIX updates on Windows Server cause session data loss + EXDEV save errors

Resolved 💬 2 comments Opened Apr 3, 2026 by henrikpapp Closed Apr 6, 2026

Environment

Bug Description

Two related issues causing complete loss of conversation history on Windows Server:

1. MSIX Update removes all session data

Each Claude Desktop MSIX update follows a Remove+Add pattern (visible in AppX deployment logs). This wipes the .claude directory contents including sessions/ and projects/ session files. The %APPDATA%\Claude\ directory is also reset (creation date matches last update: March 31).

Update history from deployment logs:

  • Mar 29: Register 1.1.9493.0
  • Mar 31: Add 1.1.9669.0 → Remove 1.1.9669.0 → Stage+Add 1.1.9669.0
  • Apr 01: Add 1.2.234.0
  • Apr 03: Add 1.569.0.0

2. EXDEV: cross-device link not permitted - Session save continuously fails

Even between updates, session saving fails with EXDEV error. The app writes a .tmp file and tries to rename() it to the final location, but the MSIX virtualized filesystem causes a cross-device link error.

From main.log:

Failed to save session local_xxx: EXDEV: cross-device link not permitted, rename 
'C:\Users\...\AppData\Roaming\Claude\claude-code-sessions\...\local_xxx.json.tmp' 
-> 'C:\Users\...\AppData\Roaming\Claude\claude-code-sessions\...\local_xxx.json'

This error repeats for every session save attempt, and also affects SkillsPlugin downloads (pdf, docx, xlsx, pptx, skill-creator all fail to download).

3. Additional issues

  • CoworkVMService fails with "signature verification initialization failed: failed to get service executable path" after updates
  • Stale WindowsApps\Deleted\Claude_1.1.9669.0* folder fails to clean up repeatedly
  • MoAppHang events frequent (crash reports reference old version 1.1.8629.0 vs installed 1.569.0.0)

Expected Behavior

  • Session data should survive MSIX updates
  • rename() should use copyFile+unlink fallback when EXDEV is detected (common Node.js pattern)
  • The .claude user data directory should not be tied to the MSIX package lifecycle

Workaround

Using the Claude Code memory system (~/.claude/projects/.../memory/) to persist important context, as this directory survives better than session files.

Suggested Fix

For the EXDEV issue: replace fs.rename() with a cross-device-safe wrapper that catches EXDEV and falls back to fs.copyFile() + fs.unlink(). This is a well-known Node.js issue when source and destination are on different filesystems/volumes.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗