[BUG] Claude Desktop MSIX: CIG (MicrosoftSignedOnly) + vendor-signed vk_swiftshader.dll kills GPU process on every browser preview (0x060C201E)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
On Windows 11 (build 26200), Claude Desktop 1.24012.9.0 (MSIX) crashes deterministically seconds after an agent opens a browser preview in the Code tab. The GPU child process dies with unhandled exception 0x060C201E, five relaunches fail (error_code=18), and the app self-terminates: FATAL: GPU process isn't usable. Goodbye. Windows then flags the package Modified, NeedsRemediation, so every crash also requires full Remove-AppxPackage + reinstall. 15 crashes captured, all second-exact correlated with CodeIntegrity events.
Root cause (verified): The GPU child runs with MicrosoftSignedOnly (CIG): ON (verified via Get-ProcessMitigation on the live process), but the package ships app\vk_swiftshader.dll signed by "Anthropic, PBC" (DigiCert) - valid Authenticode, but not Microsoft signing level - and no AppxMetadata\CodeIntegrity.cat (verified missing on disk AND inside the downloaded MSIX). When browser-preview's WebRTC path probes Vulkan, the GPU process loads vk_swiftshader.dll, CIG rejects it, and because the app is MSIX-packaged the loader escalates to ntdll!LdrAppxHandleIntegrityFailure and kills the process. Full ProcDump dump of the GPU child captured at the exact moment (WinDbg FAILURE_BUCKET: APPLICATION_FAULT_60c201e_ntdll.dll!LdrAppxHandleIntegrityFailure).
Control group: Chrome on the same machine has the identical MicrosoftSignedOnly:ON on its GPU process, logs the identical CodeIntegrity 3033 event for its own vk_swiftshader.dll - and survives, because it is not MSIX-packaged. Packaging is the only difference.
Exonerated by 30+ hours of isolation: Intel drivers 32.0.101.8331 AND 32.0.101.8860 WHQL clean install (identical crash on both); hardware (0 TDR / 0 WHEA in 30 days, disk healthy); fresh GPU caches; fresh package (Status=Ok); --no-sandbox / --disable-gpu-sandbox; clean zombie-SID scan; canonical WindowsApps ACLs; zero third-party DLLs (Defender only).
Workaround (confirmed): installing the non-MSIX build (Claude Setup.exe --exe) fully resolves it - same version, same CIG policy, same 3033 event, but the load failure is non-fatal outside MSIX. Browser previews work.
Suggested fix: drop MicrosoftSignedOnly on the GPU process in the MSIX build, or gate the Vulkan/swiftshader probe, or ship the DLL at the required signing level / with a CI catalog.
Related: #61372, #49676, #56679, #36157, electron/electron#51761
What Should Happen?
Opening a browser preview should not crash the app. The GPU process should either load vk_swiftshader.dll successfully or fail the Vulkan probe gracefully (as Chrome does with the identical file and identical CIG policy) and fall back without terminating. The package should never flip to NeedsRemediation.
Error Messages/Logs
[net] Failed to resolve address for stun.cloudflare.com / stun.l.google.com (WebRTC session setup)
<1 second later:
ERROR:gpu_process_host.cc(998) GPU process exited unexpectedly: exit_code=101457950
ERROR:gpu_process_host.cc(992) GPU process launch failed: error_code=18 (x5)
FATAL:gpu_data_manager_impl_private.cc(418) GPU process isn't usable. Goodbye.
CodeIntegrity/Operational log, second-exact with every crash (15/15):
Event 3010 x3: Code Integrity was unable to load the ...\Claude_1.24012.9.0_x64__pzs8sxrjxfjjc\AppxMetadata\CodeIntegrity.cat catalog. Status 0xC000003A.
Event 3033: claude.exe attempted to load ...\app\vk_swiftshader.dll that did not meet the Microsoft signing level requirements.
WinDbg on the ProcDump dump of the GPU child:
EXCEPTION_CODE: 60c201e (unhandled)
SYMBOL_NAME: ntdll!LdrAppxHandleIntegrityFailure
FAILURE_BUCKET_ID: APPLICATION_FAULT_60c201e_ntdll.dll!LdrAppxHandleIntegrityFailure
Live GPU child mitigation (Get-ProcessMitigation -Id <gpu pid>): MicrosoftSignedOnly: ON
vk_swiftshader.dll signature: Valid, Signer CN="Anthropic, PBC" (DigiCert) - not Microsoft level
Steps to Reproduce
- Windows 11 25H2 build 26200, Intel Arc iGPU (Core Ultra), VBS/HVCI on, Defender only
- Install Claude Desktop 1.24012.9.0 via the standard MSIX installer
- Open the Code tab, start an agent session
- Have the agent open a browser preview
- Within 7-11 seconds: WebRTC STUN lookups appear in the log, the GPU child dies (0x060C201E), the whole app terminates
- Windows Settings now shows the app needs Repair; package Status = Modified, NeedsRemediation; Repair fails; only full reinstall recovers - until the next preview
Deterministic: 15/15 previews with the MSIX build crashed. 0 crashes with the non-MSIX build (--exe) on the same machine.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
1.22209.3
Claude Code Version
1.24012.9.0 (Claude Desktop MSIX); non-MSIX build 1.24012.9 unaffected
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
Available on request (privately - dumps contain environment data): ProcDump full dump of the GPU child, CodeIntegrity event log export, main.log, two Electron stderr captures showing the STUN-to-death fingerprint, driver A/B results, full diagnostic matrix report.
35 Comments
Confirming this on discrete NVIDIA hardware, and adding one piece of evidence that I think narrows down where the fix belongs.
Environment: Windows 11 Pro 10.0.26200, Claude Desktop 1.24012.9.0, package
Claude_1.24012.9.0_x64__pzs8sxrjxfjjc,SignatureKind: Developer, RTX 5060 Ti (driver 32.0.16.1074). Three fatal crashes over two days, each one preceded within two seconds by CodeIntegrity 3033 onapp\vk_swiftshader.dll, GPU process exit 101457950, app gone.The same CIG block hits other Chromium apps on this machine and none of them die. Every 3033 event in my log over 20 days:
Chrome took the identical block on its own vendor-signed
vk_swiftshader.dlland kept running, no crash record that day. Discord takes it 33 times and keeps running. So CIG blocking a vendor-signed SwiftShader is normal Chromium behaviour and survivable. What is not survivable is what follows it here:CreateProcessfor the package starts failing with 0x3CFC and the app cannot respawn its children, so the whole thing goes down. That part looks specific to the packaging rather than to CIG or to SwiftShader.Worth stressing because it suggests two independent fixes. Shipping the catalog stops the block happening. Surviving a GPU process death, which every other Chromium app on this machine already manages, stops the outage even when the block does happen.
One difference from this report and from #81398: I do not need to reinstall. My package still reads
Status: Okand the app relaunches cleanly after each crash, despite the 0x3CFC errors at crash time. So the activation failure appears recoverable on some machines and sticky on others, which might be a useful variable to isolate.Disabling hardware acceleration does not help, matching #81745. I ran that experiment: verified via loaded modules that the GPU process had zero
nv*.dlland was onD3D10Warp.dll, and it still died with the identical exit code. WARP covers GL and compositing but Vulkan and WebGPU still fall through to SwiftShader, so the toggle moves the workload onto the exact path that is blocked.Why nobody finds a crash dump. WerFault is blocked in the same window:
That likely explains the "no crash dump" in #77768 and the empty Crashpad directories elsewhere. There is no Application Error record for
claude.exeat any of my three crashes, which sent me chasing my GPU driver for a day and a half before I found the CodeIntegrity log.Consistent with the browser-pane trigger in several of the linked issues, a Browser preview server was up at the time of the third crash, started six minutes earlier:
Impact worth flagging separately: the app dying takes running agent sessions with it, with no recovery and no notification. The 7/26 21:22 crash killed three live background tasks (
[CCD] Skipping pause for session ... - 3 active background task(s), logged 62 seconds earlier) and the app stayed down for the next seven and a half hours until I restarted it by hand the following morning.Open issues describing the same or a closely related failure, in case it helps consolidate triage:
#81745, #80999, #81275, #81698, #81398, #77768, #80978, #81578, #81159, #80483, #81358
Eleven besides this one, filed between 7/15 and 7/27. #77768 is the earliest I can find and dates the regression to around 7/15.
Confirming this on Windows 10 Pro 19045, with the mechanism measured rather than inferred. The existing reports in this cluster are all Windows 11, so this adds an OS data point, a Chrome control group with numbers, and a check on whether the package ships a code-integrity catalogue.
Environment
Claude_1.24012.9.0_x64__pzs8sxrjxfjjc, installed from "Claude Setup.exe", not the Microsoft Store.SignatureKind: Developer, publisher Anthropic PBC via DigiCert.app\versionreads 42.7.0, so Electron 42.7.0, which pins Chromium 148.0.7778.280.What happens
Any page in the Browser pane that calls
navigator.gpu.requestAdapter()kills the app. Dawn probes for a SwiftShader fallback adapter, which loadsapp\vk_swiftshader.dllfrom the package. The GPU child runs under Chromium's Code Integrity Guard, so Windows refuses the image. The GPU process dies, the browser process exhausts its GPU fallback modes and calls FATAL, and the app hangs rather than exits. On the next launch Windows tries to repair the package, fails because the AppX container is still occupied, and shows the generic "There's a problem with Claude. Reinstall the application from its original install location or contact your administrator."Measured evidence
Get-ProcessMitigationagainst the runningclaude.exe --type=gpu-process:MicrosoftSignedOnly = ON,AllowStoreSignedBinaries = OFF. The parent browser process has both OFF. This is Chromium's ownMITIGATION_FORCE_MS_SIGNED_BINS, applied to sandboxed children viaSetDelayedProcessMitigations, so it arms after startup.Get-AuthenticodeSignatureon the packagedvk_swiftshader.dllreturnsStatus: Valid,Kind: Authenticode,Signer: CN="Anthropic, PBC", O="Anthropic, PBC", L=San Francisco, S=California, C=US, issuer DigiCert. It is refused anyway, because no third-party signature reaches Microsoft signing level.0xC0000428,RequestedPolicy 8,ValidatedPolicy 1, on the packagedvk_swiftshader.dll.101457950(0x060C201E). The browser process then logs "GPU process gone" repeatedly with launcherror_code 18, and calls FATAL. That last step is Chromium'sGpuDataManagerImplPrivate::FallBackToNextGpuMode()reachingIntentionallyCrashBrowserForUnusableGpuProcess()once fallback modes are exhausted.vk_swiftshader.dll275 times and onvulkan-1.dll276 times in the same log window, and never crashed. Claude's own DLL was blocked exactly twice in 41 hours of log, both inside the crash seconds. The refusal itself is routine and survivable. What is not survivable is the escalation to a browser-process FATAL.explorer.execallsRegisterByPackageFullNamewithRepairAppRegistrationOption. It fails with0x80073D02 ERROR_PACKAGES_IN_USEbecause the AppX container is still occupied by the wedged processes, and Windows shows the generic reinstall dialog. Killing the container processes and relaunching recovers it, so no reinstall is actually needed.AppxMetadatafolder is absent and there are zero.catfiles anywhere under the install root. The catalogue is not the fix, though. In the equivalent OpenAI Codex case (openai/codex#34133) the catalogue is present and valid, validates at Store signing level 6, and the load is still refused against requested level 8.Caveat about the binary on disk
The package was re-staged after the crash. The deployment log shows same-version AddPackage operations with
ForceApplicationShutdownOption,ForceUpdateFromAnyVersionfollowing the incident. Anything hashed or inspected on disk now describes the re-staged copy, not the exact image that was blocked at crash time. The event-log entries above are from the crash window itself and are unaffected.Why a Chromium or Electron bump will not fix this
Chromium hit this in 2022 and solved it by preloading
vk_swiftshader.dllbefore sandbox lockdown (commit51c97ad46b7b, bug 1266550). The in-tree comment states that adding the DLL to the sandbox allowlist is impossible, because the sandbox only admits Microsoft-signed code, and that the refusal is meant to be non-fatal. In March 2026 commit97b3f5d7800fde085af53b1b7455b730c215a874(bug 489001140, mirrored in the gpu subtree as963206a961a7992b048d07f756f87f11fa2e5420) narrowed that preload to flag-gated cases, on the reasoning that WARP is now the default Windows software rasterizer. It landed in 148.0.7734.0 and reached stable in 148.0.7778.49. Electron 42.7.0 pins 148.0.7778.280, and none of its chromium patches touchgpu_init.cc,vk_swiftshaderorFORCE_MS_SIGNED. So this build already contains the narrowing, and no upstream bump restores the preload.That leaves the load happening late, from the Dawn fallback-adapter probe, after the delayed mitigation is armed.
Possible fixes, ranked
vk_swiftshader.dlland rely on WARP, which is Chromium's own stated reason for narrowing the preload.--use-webgpu-adapter=swiftshader, which the narrowing commit names explicitly as a preload condition. Note that MSIX activation discards launch flags, so this has to be set by the app, not by the user.ERROR_PACKAGES_IN_USEand tells the user to reinstall.Two dead ends worth ruling out early. Signing cannot fix it, since requested level 8 is Microsoft product signing and even a genuine Microsoft Store catalogue at level 6 is refused. And
--allow-third-party-moduleswould work but disables the binary-signature mitigation for sandboxed children, which is the wrong trade in a shipping app.One thing I have not reproduced myself: other reporters state the crash still occurs with
isHardwareAccelerationDisabled: trueactive, since disabling acceleration steers Chromium into the software path where SwiftShader lives. If that holds, the Help menu toggle is not a workaround.Available on request
Get-ProcessMitigationdumps for the parent and the GPU child, side by side.AppxMetadatafolder, plus the signature dump and SHA-256 of the re-staged DLL.Confirmed on Windows 10 22H2 build 19045.7548 with Claude Desktop 1.24012.9.0 x64 MSIX.
The issue is second-exact correlated with Windows Code Integrity:
2026-07-29 01:11:26 – Event 3010
Code Integrity was unable to load:
...\AppxMetadata\CodeIntegrity.cat
Status: 0xC000003A
2026-07-29 01:11:26 – Event 3033
claude.exe attempted to load:
...\app\vk_swiftshader.dll
which did not meet the Microsoft signing level requirements.
Immediately afterwards the Claude GPU process crashed with:
reason: crashed
exitCode: 101457950
serviceName: GPU
Get-AppxPackage then changed from:
Ok
to:
Modified, NeedsRemediation
Reproduction on this machine:
Additional diagnostics:
This was reproduced after a clean reinstall and matches the CodeIntegrity.cat / vk_swiftshader.dll failure described here. Full logs and the minidump are available privately because they may contain local paths and environment data.
Independent confirmation, plus a recovery that avoids the reinstall
I hit this on different hardware and can confirm your root cause. More usefully, I found
a recovery that doesn't require reinstalling and doesn't lose session history, which
seems worth having given how many duplicate reports are piling up (map at the bottom).
*Edited after an adversarial review: I had two claims in here that were wrong, and I've
corrected them rather than quietly deleting them. See the "two wrong turns" note in
section 3 and the correction in section 6.*
*Follow-up posted with further evidence: the paired Event 3089 signature data, a
signing-property hypothesis I tested and refuted, the
AllowStoreSignedBinariesflagstate, and four more issues for the cluster. See
the follow-up comment.
It supersedes the open question I left at the end of section 3.*
Environment
| | |
|---|---|
| OS | Windows 11 Business,
EditionID: Professional|| Version / build | 25H2, build 26200.8893 (
10.0.26200), x64 || Latest LCU | KB5121768 (installed 2026-07-19) |
| Claude Desktop | 1.24012.9.0 MSIX,
Claude_1.24012.9.0_x64__pzs8sxrjxfjjc, X64 || Claude Code CLI | 2.1.220 |
| GPU | Intel(R) Arc(TM) Pro Graphics, driver
32.0.101.8517(2026-04-03) || Region / locale | Format and UI culture en-GB; system locale en-US; GeoID 242 (UK); TZ
GMT Standard Time(UTC+00:00) || VBS / HVCI |
VirtualizationBasedSecurityStatus: 2,SecurityServicesRunning: {2,3,4,7},CodeIntegrityPolicyEnforcementStatus: 2|| Smart App Control | Off, so this isn't a user-imposed lockdown |
Comparing this against the other reports rules out three things:
#80444 is an NVIDIA RTX 2080 and openai/codex#34133
is an RTX 4060 Ti. It spans Intel and NVIDIA, integrated and discrete.
in codex#34133, 22000 in the ChatGPT-desktop thread, Win10 22H2 in #82381.
1. Confirming the CIG mechanism
Get-ProcessMitigationagainst the live Chromium children reproduces your finding:The raw
EventDataof the 3033 event is consistent with what CIG would request:Those three values are reproduced field-for-field in openai/codex#34133 on different
hardware and a different OS build, so they look stable across environments.
For completeness, the bundled DLL does carry a real signature:
Status: Valid,SignatureType: Authenticode(embedded, not merely package-level), signerCN="Anthropic, PBC". Worth stating because a public ChatGPT-desktop thread claims theDLL "only carries package-level signing", which isn't true of this build, so "just sign
it" isn't the fix. Chrome's copy of the same DLL on this machine is
CN=Google LLCandgets rejected identically, so it isn't about who signed it.
2. Your MSIX-vs-non-MSIX conclusion shows up in ambient logs too
Grouping every Event 3033 on this machine by process and blocked file:
Chrome absorbed the identical rejection 108 times with no user-visible consequence
because it isn't MSIX. Claude is bricked by 2. That's independent support for
"packaging is the only difference", and I'd argue it makes the escalation (blocked DLL,
then process death, then package flagged as tampered) the highest-value thing to fix,
regardless of what happens with the DLL itself.
3. What is and isn't blocked, and two wrong turns worth avoiding
Inside the same CIG-enabled GPU process, these bundled DLLs load successfully, with no
3033 against them:
| DLL in
app\| SignatureType | Blocked? ||---|---|---|
|
vk_swiftshader.dll| Authenticode (vendor) | yes, twice ||
libGLESv2.dll| Authenticode (vendor) | no ||
libEGL.dll| Authenticode (vendor) | no ||
dxcompiler.dll| Authenticode (vendor) | no ||
d3dcompiler_47.dll| Catalog (Microsoft) | no ||
vulkan-1.dll(this package's copy) | Authenticode (vendor) | never loaded into the GPU process at all, and never observed blocked from this package. The 108vulkan-1.dllrejections above are Chrome's own copy at Chrome's path. |So three vendor-signed, in-package DLLs load fine in a process where
MicrosoftSignedOnly = ON, whilevk_swiftshader.dllis rejected.I went down two blind alleys explaining that, and I'm writing both up because each one
looks convincing:
First wrong turn: "so CIG isn't really active." It is.
Get-ProcessMitigationreports
MicrosoftSignedOnly = ONfor that exact PID. Verify the mitigation directlyinstead of inferring it from which DLLs happened to load.
Second wrong turn: "CIG is applied late, so only late loads are blocked." I proposed
that Chromium enables the mitigation after ANGLE initialises, and offered the module
list as proof. Enumerating the GPU process's modules gives, at indices 39 to 51 of 52:
dxcompiler.dllis vendor-signed, in-package, and present at index 49 of 52.I originally wrote that this "refutes" the late-mitigation theory. That was too strong,
for two reasons, and I'd rather flag them than have someone build on a bad inference:
contested. It's commonly said that the enumeration walks the PEB's
InLoadOrderModuleList, but Microsoft doesn't document an ordering guarantee forEnumProcessModules, so I wouldn't hang an argument on index position alone.different explanation: that CIG doesn't reject in-package DLLs covered by the
package blockmap at all, at any time. That would make timing irrelevant rather than
decisive.
So I'm not claiming ordering is ruled out. What I'd say is only this, which the data does
support: whatever the rule is, it permits at least three vendor-signed in-package DLLs in
this process while rejecting
vk_swiftshader.dll, and it rejects it withSTATUS_INVALID_IMAGE_HASHrather than a plain signature-level refusal.That makes the useful question narrower than "vendor DLLs can't load in the GPU process".
It's: what is different about how this one DLL gets loaded? One direction I can't settle
from outside is whether the Vulkan loader brings the ICD in via a path or
LoadLibraryExflag combination that skips the package-identity validation the other in-package DLLs
receive. If so, that would also explain why the missing
AppxMetadata\CodeIntegrity.catyou found matters for this DLL and not the others. Someone with loader or Chromium source
access can check that far more cheaply than I can.
4. Recovery without reinstalling, and without losing data
This is the part I most want to contribute, because this issue and the related ones all
prescribe either Repair (which can't work) or
Remove-AppxPackageplus reinstall (whichdestroys data).
Nothing on disk is actually corrupt. All 2182 files in the install directory keep their
original install timestamps; zero modified. What blocks launch is a flag Windows sets
when it sees the rejected in-package binary:
Because it's a flag rather than damage, Repair structurally cannot clear it. Repair is a
re-registration, and the registration was never broken. I ran five consecutive
registration attempts (four via Settings > Repair, one via
Add-AppxPackage -Register). Each logged:-DisableDevelopmentMode -ForceApplicationShutdown
while
StatusstayedModified, NeedsRemediationthroughout. The deployment log reportssuccess on operations that demonstrably fix nothing, which is its own bug and cost me
hours of misdiagnosis.
Clearing the flag recovers the app, keeps all sessions, and needs no reinstall. Run
elevated, and note the
@(...)and the count check: if more than one Claude package isregistered,
.PackageFullNamereturns an array and the path would silently be malformed,so this refuses to guess.
Applied twice here. The cleared flag survived a reboot and the app has been healthy
since, with all sessions intact.
5. Why "reinstall after each crash" is worse than it sounds
-PreserveApplicationDatacannot protect user data on this package. It fails with:Claude's MSIX is a normally signed package, so the flag is rejected outright and there's
no supported data-preserving package replacement. A removal wipes, under
%LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalCache\Roaming\Claude\:claude-code-sessions\, all Code-tab session historyclaude_desktop_config.json, the MCP server configurationClaude Extensions\, roughly 12.5k files and 128 MBvm_bundles\claudevm.bundle\rootfs.vhdx, the ~8.9 GB Cowork VM image (re-downloads)The top-level folders survive as empty shells, so "the folder is still there" isn't
evidence the data survived. This cost me 56 Code-tab sessions, recovered only because a
Volume Shadow Copy happened to exist. Anyone following the reinstall-per-crash advice in
this thread should back up
claude-code-sessions\first, and ideally use section 4instead.
6. Practical notes on the workaround
--disable-gputested clean here: launched with it, the GPU process loaded ANGLE(
libglesv2.dll,libegl.dll,d3dcompiler_47.dll), no swiftshader module, and no 3033fired. Check with:
Correction. An earlier version of this comment claimed the flag works because the
software path becomes D3D11 WARP, citing
d3d11.dll,Microsoft.Internal.WarpPal.dlland
D3D10Warp.dllin the module list. That was an unsupported inference and I withdrawit. Those modules sit directly after
dwmapi.dllanddcomp.dll, which is a much betterfit for them arriving via OS composition than via Chromium's rasterizer selection, and
Chromium's software rasterizer is SwiftShader in any case. All I can actually claim is
the observation: with
--disable-gpu, no swiftshader module was loaded and no 3033 fired.Why is not established.
This still conflicts with #81840, which reports crashes persisting with hardware
acceleration disabled, and that's worth reconciling. It may mean the in-app toggle and the
command-line flag don't take the same path, but I can't demonstrate that.
I'd expect
--disable-software-rasterizerto be more targeted, sincevk_swiftshader.dllis the software rasterizer, but I have not tested it. Offering it asa hypothesis. Note that Chromium silently ignores unrecognised switches, so a self-check
can't distinguish "the flag worked" from "the flag was a no-op".
Invoke-CommandInDesktopPackagedoes not work here. The method usually suggested forpassing flags to an MSIX app hung for over 120 seconds and never started the app (no
process, app log untouched). What works is
IApplicationActivationManager::ActivateApplicationwith AUMID<PackageFamilyName>!Claude, which returnsS_OKand a PID immediately.One gotcha if you use that: the app starts with no visible window. After
S_OKtheprocess tree is alive and healthy (main, gpu, renderers, utilities; renderer around
365 MB, plugins synced, telemetry flushing) but
MainWindowHandleis 0 on every process.Enumerating top-level windows shows the window does exist,
Chrome_WidgetWin_1titledClaudewith sane 1215x809 geometry, but withIsWindowVisible = Falseand notminimised, alongside an
Electron_NotifyIconHostWindow. So it starts hidden to tray. Asecond activation un-hides it but leaves
IsIconic = True, so an explicitShowWindow(hwnd, SW_RESTORE)plusSetForegroundWindowis needed to get it on screen.Worth knowing because "the process is running" reads as success while the user sees
nothing; I initially mis-reported it as working for exactly that reason.
Neither launch method is discoverable by a normal user, and the flags can't be attached
to an ordinary Start-menu or taskbar pin. Windows 11 also blocks programmatic pinning
(the
Pin to taskbarverb is absent entirely, andPin to Startfails withE_ACCESSDENIED), so a wrapper shortcut can't be installed automatically either. Hencethe request for an in-app "Disable hardware acceleration" toggle.
7. Issue map, since these look like the same defect
Posting here rather than opening another issue, since the tracker already has a lot of
this. Grouped by what each one contributes:
Same mechanism, GPU crash plus package flagged:
ntdll!LdrAppxHandleIntegrityFailure, and the decisive 15/15 MSIX versus 0/15 non-MSIXexperiment. This should be the canonical one.
vk_swiftshader.dllin the GPU process on first in-app Browseruse; package flagged; app self-terminates. Names itself root cause for #49676.
0x060C201E,appxState=2, in-app Browser trigger, same--disable-gpuworkaround. Adds a regression signal: zero GPU crashes on 1.22209.3,onset immediately after the 1.24012.1 auto-update. Four crashes in about 14 hours.
disabled. The one datum that doesn't fit cleanly; see section 6.
Same end-state, mechanism not identified, plausibly this bug seen from above:
disk", no Windows Update involved. Matches section 4 exactly: a stale flag, not damage.
cowork-svc.exelocks the package (AppX0x80073D02). Probably adistinct fault, a file lock rather than a CI flag, but easily confused with this one.
0x80073CF6, stuck NeedsRemediation after a "successful" install.Also probably distinct, though it shares the misleading-success-log theme from
section 4.
invalid.That report is Server 2025, build 26100, KB5094125. I'm on Win11 25H2, build 26200,
a different KB, and I see the identical end-state with no LCU involved, so it may be
worth re-triaging as possibly this bug diagnosed one layer too high.
Not Claude, same rejection in other Chromium apps:
RequestedPolicy 8,ValidatedPolicy 1,0xC0000428and identical GPU exit code101457950; relaunch fails with exit 18. Their package stayedOk.ChatGPT/Codex desktop Store MSIX build, going to
Modified, NeedsRemediationandrequiring repair and re-registration. Same MSIX escalation.
vulkan-1.dll.Same 3033, with Microsoft-side responders calling it "likely a false positive". A
different context (not MSIX, not a Chromium GPU child), cited only to show that bundled
Vulkan DLLs commonly trip 3033.
8. What I'd ask for, ranked
failed software-rasterizer load should degrade to "no GPU acceleration", not terminate
the app and leave the MSIX flagged as tampered. Highest value, and entirely within
your control.
MicrosoftSignedOnlyon the GPUprocess in the MSIX build (as you propose), don't ship the SwiftShader/Vulkan ICD
there, or gate the probe. Re-signing won't help, per section 1. Shipping
AppxMetadata\CodeIntegrity.catmay be worth evaluating, though note that Event 3010for the missing catalog also fires when the app is working fine, so its absence isn't
sufficient on its own to explain the failure.
PackageStatus = 2and clear it, or show aprecise message. Windows' generic Repair text can't fix this and actively pushes users
toward a destructive reinstall.
(section 6).
outside volatile package-local state, or an export/import. Today the documented
recovery destroys all Code-tab history with no warning (section 5).
that fix nothing (section 4).
---
*All event IDs, HRESULTs, registry values, signature types, mitigation states and module
lists above were observed directly on my machine; nothing is reconstructed from memory.
Where something is inference rather than observation I've tried to mark it, and section 6
records one inference I got wrong and withdrew. Diagnosis and write-up produced with
Claude Code, then adversarially reviewed by three non-Anthropic models, which is what
caught the WARP error. Local paths and identifiers redacted.*
Follow-up: the paired Event 3089 data, a signing hypothesis I tested and had to abandon, and one config flag worth checking
Posting separately rather than editing my earlier comment, because edits send no notifications to anyone subscribed here, and because one part of this is a hypothesis I raised and then killed. That sequence is more useful visible than tidied away.
Everything below was observed on the same machine as my earlier comment (Win11 25H2 build 26200.8893, Claude Desktop 1.24012.9.0 MSIX, Intel Arc Pro).
1. Event 3033 has a paired Event 3089 that nobody has posted yet
Each 3033 rejection is accompanied by Event 3089 carrying per-signature detail. For the rejected DLL, both signatures (
TotalSignatureCount = 2) report identically:KnownRoot = 1next toValidatedSigningLevel = 1is the interesting pair: the certificate chain is trusted, and the binary still validates at the lowest level. I am not interpretingVerificationError = 7orPolicyBits = 16, since I could not find authoritative definitions for them.Grouping every 3089 on this machine by publisher and profile:
Chrome's rejected copies produce an identical profile, which independently confirms the rejection does not depend on who signed the file.
Note also that Event 3089 fires only alongside rejections. There is no 3089 for a successful load, so the event log alone cannot compare blocked against allowed DLLs. That mattered, as follows.
2. A page-hash hypothesis, tested and refuted
PageHash = falseplusSTATUS_INVALID_IMAGE_HASHsuggested to me that this load path requires page-hash validation, which an ordinary embedded Authenticode signature cannot supply, and that an MSIX would normally supply them via theAppxMetadata\CodeIntegrity.catyou found missing. That would have tied your catalog observation neatly into the mechanism.It is wrong, and I want to save anyone else the detour.
Since
signtool.exeis not installed here andcertutil -dumpdoes not surface the attribute, I parsed the PE security directory directly and searched the Authenticode blob for the page-hash OIDs1.3.6.1.4.1.311.2.3.1and1.3.6.1.4.1.311.2.3.2:| Binary | Loads in the CIG-enabled GPU process | Page hashes present |
|---|---|---|
|
app\vk_swiftshader.dll| rejected | no ||
app\libEGL.dll| loads fine | no ||
app\libGLESv2.dll| loads fine | no ||
app\dxcompiler.dll| loads fine | no ||
app\vulkan-1.dll| not loaded in that process | no || Chrome's
vk_swiftshader.dll(non-MSIX) | rejected | no ||
d3d11.dll,D3D10Warp.dll,dcomp.dll,ntdll.dll,kernel32.dll| n/a, Microsoft-signed | yes, all five |The five Microsoft binaries coming back positive are the control that shows the parser works, so the negatives are real rather than a detection failure.
Every binary in the package lacks page hashes, including the three that load successfully in a process where
MicrosoftSignedOnly = ON. So missing page hashes cannot be what distinguishes the blocked DLL from its neighbours, and a package-wide missingCodeIntegrity.catcannot either, for the same reason: it is package-wide, while the failure is not.There is a useful consequence. The blocked DLL and the DLLs that load are now shown to be indistinguishable in their signature properties: same publisher, same issuer, same signature type, same absence of page hashes. Whatever the discriminator is, it is therefore not a property of the signature. That removes the whole class of signing-based explanations, including my own, and leaves how the DLL is loaded as the remaining candidate. It also means re-signing almost certainly will not fix this.
I am not claiming to know the discriminator. I raised a load-ordering idea earlier and withdrew it as overstated, and I am not reviving it as settled. I would only say it is now the more plausible remaining direction, because the alternative it competed with has been eliminated.
3.
AllowStoreSignedBinariesis OFF, and that looks like the actionable knobWorth pulling out of my earlier comment, because I under-emphasised it. The full mitigation state on the GPU child is:
CIG has a variant that permits Store-signed binaries alongside Microsoft-signed ones. The GPU child is created with the strict form and without the Store allowance, even though every binary it needs to load comes from a signed MSIX package. If the MSIX build created the GPU child with the Store-signed allowance enabled, package binaries would be admissible without weakening the mitigation for anything else. That seems a smaller change than re-signing or restructuring the package, and it is checkable in your sandbox configuration.
I have verified the flag state. I have not verified that flipping it resolves the crash, and I cannot from outside.
4. Event 68 records the flag transitions, and independently corroborates that Repair cannot work
Microsoft-Windows-AppModel-Runtime/AdminEvent 68 logs package status changes. Observed on 2026-07-30:Five remediation attempts each return the base value to
0x2; only the reinstall reaches0x0. This is a differently-shaped confirmation of what the thread already reports about Repair.To be precise about what I am and am not saying:
0x80000behaves as a transient bit in this trace, appearing over both a0x2and a0x0base and clearing within a second or two. I did not confirm these bit semantics against Microsoft documentation and am not asserting them.5. Ordering at the failure, with the inference marked
The flag must have been set to
0x2between.610and20:34:17, because Event 68 at:17reports it as the previous value. That interval is an inference from the surrounding records; the moment the flag is set is not itself logged, and I am not claiming the ordering proves causation.Related, and worth flagging because it cuts against a tempting shortcut: Event 3010 for the missing catalog also fired at 20:25:37, nine minutes earlier, while the app was working normally. A missing
CodeIntegrity.catis therefore not sufficient on its own to produce the failure.6. No crash artefact is produced locally
Verified counts:
The package's own
Crashpad\reports\directory is empty apart from a 0-bytemetadataand a 40-bytesettings.dat.I originally read this as "crashpad intercepted and uploaded the crash, so you already have this telemetry server-side". Three reviewers independently told me that is unsupported, and they are right: an empty crashpad directory is equally consistent with nothing ever having been captured. A failed
LoadLibraryunder CIG can also produce a clean exit rather than a crash, in which case there would be no crash to capture at all. I withdraw that reading.What stands is the plain observation, and it has two consequences that do not depend on the withdrawn part:
Whether crashpad captured or uploaded anything is something only you can determine.
7. Upstream context: Chromium is removing the SwiftShader fallback anyway
Relevant to the "stop shipping the software rasterizer" option. Chromium has deprecated automatic WebGL fallback to SwiftShader and intends to remove it, explicitly because SwiftShader means JIT-ed code in the GPU process and is treated as a high security risk. A console warning has shipped since Chrome 130, WebGL context creation is intended to fail rather than fall back, and
--enable-unsafe-swiftshaderexists as the opt-in for anyone who still wants it. See the Intent to Remove: SwiftShader Fallback thread and docs/gpu/swiftshader.md.So dropping the SwiftShader fallback from the MSIX build is not a workaround against the grain of upstream. It is where upstream is heading, and handling WebGL context-creation failure is the behaviour Chromium is asking embedders to adopt.
8. Further issues that belong in the cluster
Adding to the map in my earlier comment. All still open, none with a maintainer response:
spawnLocalProcessfailing on enterprise Windows with WDAC kernel-mode enforcement. Different symptom, but the same broad family of code-integrity policy blocking a bundled component, so possibly worth revisiting alongside this.One correction to the related list in the issue description: electron/electron#51761 looks like a different fault despite the similar symptom. It attributes GPU process init failure to orphaned
S-1-15-*"zombie SIDs" in the app folder DACL, reproducible withicacls /grant "*S-1-15-2-999-999-999:...", with--disable-gpu-sandboxas the workaround. No Code Integrity, no signing level, no MSIX packaging involved. Probably worth unlinking to avoid muddying this diagnosis.9. Three checks that would settle what I could not
AppxMetadata\CodeIntegrity.catis intentionally omitted from the MSIX, and what your signing pipeline does about page hashes. Section 2 shows page hashes are absent package-wide, so this is about whether the omission is deliberate rather than about explaining the selectivity.10. Update: the verbose-channel test is a dead end, and that closes the last external avenue
I suggested
Microsoft-Windows-CodeIntegrity/Verboseabove as the way to get Event 3089 for a successful load. I have since run it, and it cannot answer the question on this build. Correcting that here so nobody repeats it.It turned out not to need a crash reproduction at all, only a successful load, so a plain
--disable-gpulaunch was enough. Enable the channel withwevtutil sl ... /e:true /q:true, restart the app, capture, restore the channel.Result, confirmed both by my harness and by reading the
.evtxindependently:The Verbose channel only carries cache-retrieval tracing, with no signature data at all:
No
PublisherName, noPageHash, noValidatedSigningLevel, noVerificationError. The channel does cover the binaries of interest (32 records name the package, includingdxcompiler.dllanddxil.dll, both vendor-signed and both loading fine), but without signature fields they can't be compared against the rejected DLL.So on Windows 11 26200, the signature-level comparison between a rejected and an accepted in-package DLL is not obtainable from Windows event logs at all. Event 3089 exists only as a rejection artefact. Direct PE/Authenticode parsing (section 2) is the only external route, and that is already done: signature properties are identical across blocked and allowed binaries. Anything beyond this needs instrumentation inside the loader or Chromium, which is why item 2 above is now the highest-value remaining check.
Two tooling traps if anyone does try this, both of which bit me:
Get-WinEventthrows on an analytic/debug channel without-Oldest("can be read only in the forward chronological order"). My first draft omitted it under-ErrorAction SilentlyContinue, which swallowed the error and would have reported "no events captured", a false negative indistinguishable from a real result. I only caught it by reading the log independently instead of trusting my own harness.wevtutil sl /e:trueon a Debug channel prompts "Enabling this type of log clears it... [y/n]" and hangs without/q:true.---
Everything quoted here was read off this machine. Where a claim is inference I have said so, and section 2 and section 6 record two readings I withdrew. Diagnosis produced with Claude Code and then reviewed by three non-Anthropic models, which is what caught the crashpad overclaim and prompted the page-hash test that refuted my own hypothesis. Local paths and identifiers redacted.
Windows 10 data point on "sticky vs recoverable", and a second confirmation of the data loss
Adding to @DrRIH's sections 4 and 5, from the Windows 10 22H2 machine in my earlier comment (build 19045.7548, same package, same 1.24012.9.0).
The StateChange key is absent here, not set to 0
Current state on this machine:
I went through the uninstall/reinstall cycle twice on 7/29, before your recovery method was known. So
Remove-AppxPackageplus reinstall appears to discard the key with the registration rather than clear its value.That is a third outcome next to "sticky" and "recoverable", and it has one practical consequence worth stating: a missing key is not evidence that a machine never hit this bug, so anyone surveying incidence via that key will undercount reinstalled machines.
Second confirmation of the data loss in section 5
Your section 5 holds on Windows 10 too. Under
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\:| | |
|---|---|
|
Claude Extensions\| gone ||
vm_bundles\| gone ||
claude-code-sessions\| present, but the oldest surviving entry is dated 2026-07-29 01:01, ten minutes before the crash in my earlier comment. Everything predating the reinstall is gone. ||
claude_desktop_config.json| present, but recreated rather than preserved |So the reinstall advice in this thread has now demonstrably cost user data on at least two machines, on two different Windows versions. That seems worth weighting alongside the crash itself when this gets triaged.
One correction to my own earlier comment
I led with the Event 3010 /
CodeIntegrity.catcorrelation. Your section 2 shows page hashes are absent package-wide, including from the in-package DLLs that load fine in the same CIG-enabled process, and your section 5 notes 3010 also fires while the app is healthy. The missing catalogue therefore cannot be the discriminator, and I withdraw that part of the framing.The 3033 block, the
101457950/0x060C201Eexit, theOk->Modified, NeedsRemediationtransition and the second-exact ordering all stand as observations. The catalogue reading does not.Still reproduces on 1.24012.11.0 (released to my machine 2026-08-04), unchanged.
Adding three things this thread does not have yet: a datapoint that the condition
does not require VBS/HVCI, a workaround that keeps the MSIX build, and a
recovery path lighter than a full reinstall.
1. Confirmation on 1.24012.11.0, with VBS/HVCI and Smart App Control OFF
The original report ran with VBS/HVCI on. This machine has all of it off, and it
still reproduces deterministically — so the failure is not gated on HVCI or Smart
App Control, which widens the affected population.
| | |
|---|---|
| Claude Desktop | 1.24012.11.0 (MSIX),
Claude_…_x64__pzs8sxrjxfjjc,SignatureKind = Developer|| OS | Windows 11 25H2, build 26200.8875 |
| GPU | Intel Iris Xe, driver 32.0.101.7085 |
| HVCI / VBS | not running (
Win32_DeviceGuard.SecurityServicesRunning = 0) || Smart App Control | off (
VerifiedAndReputablePolicyState = 0) || Third-party WDAC | none (inbox policies only) |
| AV | Defender only |
Repro: launch normally (no extra flags) → open the in-app Browser → load any
content-heavy page → GPU process dies within ~2 minutes.
Raw 3033 event data (not posted in the thread so far):
Both preconditions are unchanged in 1.24012.11.0:
AppxMetadata\CodeIntegrity.catis still absent from the installed package(checked on disk; the 3010 events fire three times per incident).
MicrosoftSignedOnly: ON,AllowStoreSignedBinaries: OFF(
Get-ProcessMitigationagainst the live GPU pid).Package flipped to
Modified, NeedsRemediationafter the crash, same as reported.2. Workaround that keeps the MSIX build (no security downgrade)
The thread's current workaround is to switch to the non-MSIX
.exebuild. Foranyone who has to stay on MSIX, avoiding the DLL load entirely also works:
Launched through
Invoke-CommandInDesktopPackageso package identity, the GPUsandbox and CIG all stay intact — I verified
MicrosoftSignedOnlyis stillONon the GPU child under these flags. No
--no-sandbox, no--disable-gpu-sandbox,no
RendererCodeIntegritychange.A/B on the same machine, same day, same page (Keysight N9010A product page) in the
in-app Browser:
screenshots: 0 × CI 3033, 0 ×
GPU process gone, GPU pid unchanged throughout.Two caveats worth knowing:
the flags (autostart, tray revive, protocol/deep-link activation) is exposed again.
app relaunched itself (
[updater] Version changed since last launch) with no flags,and ran unprotected until it was manually restarted through the wrapper.
disables are the ones that should matter.
3. Recovery may not need a full reinstall
Reported here as "only full reinstall recovers". In my case it did not:
0x80073D02—"cannot install because the following apps need to be closed: Claude…" — i.e. the
Register step (2 of 2) failed only because the app was still running, and the UI
surfaced that as a flat "cannot repair this app".
Status = Okwith no
Remove-AppxPackage/ reinstall.Worth trying before a reinstall: fully exit the app (including tray), then launch
again, then re-check
(Get-AppxPackage -Name Claude).Status.4. On the suggested fix
SignatureKindon the installed package isDeveloper, and the GPU child hasAllowStoreSignedBinaries: OFF, so "distribute through the Store to reach Storesigning level" would not help by itself. Shipping the
CodeIntegrity.catcatalog,or not enabling
MicrosoftSignedOnlyfor the GPU process in packaged builds, ornot probing the SwiftShader Vulkan backend at all in MSIX builds, all would.
Independently of the signing question: a blocked DLL load in a fallback graphics
backend should not terminate the whole app and leave the package in
NeedsRemediation. Chrome logs the identical 3033 for its own copy of this DLL andsurvives, as the original report notes.
Correction to my earlier workaround, and what 1.24012.11.0 does and does not change
Two things: I have to withdraw a recommendation I made in my earlier comment, and report what I can and cannot establish about 1.24012.11.0. Windows 11 Pro 26200, same machine as before. (Assistant-assisted analysis; local paths and identifiers redacted.)
1. Withdrawing
--disable-gpu— my verification method was invalidI recommended launching with
--disable-gpu --disable-software-rasterizer, and said it was verified because inspecting the livegpu-processmodules showed no swiftshader module loaded.That check does not test the flags. On 2026-08-04 this machine ran 1.24012.11.0 with a bare command line — no flags at all — and the live GPU child still showed zero swiftshader/vulkan modules. A flagless launch produces exactly the result I was reading as proof, so the reading distinguishes nothing. Most likely the module list simply reflects that nothing had yet triggered the fallback path that reaches this DLL, but whatever the reason, the check cannot separate "the flags worked" from "the flags did nothing." Every "verified module-clean" statement in my earlier comment should be disregarded.
To be precise about the scope of this retraction: I have not shown that
--disable-gpufails. I have shown that I never tested it. It is unproven, not refuted.One further reason for caution, which I flag as conditional because I cannot verify the mapping: if Electron's
app.disableHardwareAcceleration()results in--disable-gpubeing applied — the Electron docs say only "Disables hardware acceleration for current app" and do not document the mechanism — then @relanderolli's measurement above bears directly on my flag, since they observed a GPU child onD3D10Warp.dllwith zeronv*.dllthat still died with101457950. On that reading there is also no longer any conflict between my earlier result and #81840; my result was simply not evidence either way.The flag set posted by @15230745073 above (
--use-angle=d3d11 --disable-features=Vulkan,VulkanFromANGLE,WebGPU,WebGPUService,Dawn --disable-gpu-compositing) is better evidenced than mine — it targets the adapter probe rather than the rasterizer, and it is the only workaround in this thread supported by a same-machine, same-page A/B.The general point, since it caught me: a clean module list at startup is not a test. The only sound check is CI 3033 after the Browser pane has actually loaded a page that exercises WebGPU.
2. 1.24012.11.0 — the read-only preconditions I checked are unchanged
I have not run a trigger test on 1.24012.11.0, so I am not reporting a reproduction. What I can report is that the conditions this thread identifies as necessary are all still present, which needs nobody to risk a crash:
| | 1.24012.9.0 | 1.24012.11.0 |
|---|---|---|
|
AppxMetadata\CodeIntegrity.cat| absent | absent — zero.catfiles anywhere under the install root ||
app\vk_swiftshader.dll| shipped,Status: Valid,SignatureType: Authenticode,CN="Anthropic, PBC"| shipped, same signer, 5,546,320 bytes, rebuilt 2026-08-03 || GPU child mitigation |
MicrosoftSignedOnly: ON,AllowStoreSignedBinaries: OFF| identical (Get-ProcessMitigationon the live GPU pid) ||
app\version| 42.7.0 | 42.7.0 |Two caveats on that table. The DLL carries a fresh build timestamp, so it is not necessarily byte-identical to the 1.24012.9.0 copy — I cannot compare, as the older package is gone from this machine; what I can say is that it is still shipped and still carries a third-party Authenticode signature rather than a Microsoft one. And the mitigation row describes the GPU child of a flagless launch, which is the default configuration users get.
The unchanged
app\versionis the part I would draw attention to. Per @vkwislacode's analysis above, Chromium's preload ofvk_swiftshader.dllahead of sandbox lockdown was narrowed in March 2026, and on their reading Electron 42.7.0 still carries that narrowing with no restored preload — that research is theirs, not mine. If so, the runtime side is unchanged between these two app versions. Consistent with @15230745073 reproducing the crash on 1.24012.11.0, and with #83744.3. After the auto-update, the running instance had no launch flags
I want to be careful about what I actually saw here, because it is easy to overstate.
Observed, from
main.logand the process list:and afterwards the running main process had a bare command line — just the executable path, no switches — despite this machine normally starting the app through a wrapper that supplies them.
Not observed: I did not watch the transition, and the log shows the restart was deferred at 09:31:56 rather than forced. So I cannot say what path the process took between those entries, or that the update mechanism itself discarded the flags. Something between the update and 09:42:41 produced a flagless instance; which component did that, and whether a user action was involved, I do not know.
I am reporting it because @15230745073 above describes flags being lost across an update on a different machine, and because the practical consequence holds regardless of mechanism: after an update you may be running unprotected while believing you are not. Anyone relying on a per-launch workaround in this thread may want to check the live command line rather than assume, e.g.
Relatedly, and this one is a design consequence rather than an observation: switches cannot be added to a process that is already running, so restoring a flagged launch requires a full exit including the tray icon, not just reopening the window.
4. Control group, refreshed
Same 14-day CodeIntegrity/Operational window on this machine, exact counts:
562 blocks against Chrome, no crashes. 2 against Claude, both fatal, both flipping the package to
Modified, NeedsRemediation. The refusal is routine; the escalation is the defect. This matches the ratios @vkwislacode (275/276 vs 2) and @relanderolli reported on different machines and different Windows versions.5. Updated issue map
The cluster has roughly doubled since I posted the last map, and the newer reports are almost entirely uncross-linked.
Same signature, filed since 2026-07-28:
0x80073CF6; argues Store remediation cannot service a developer-signed package by designAuto-update interaction, which section 3 makes me think is worth looking at alongside this:
Previously mapped: #81745, #81123, #81840, #82381, #81992, #81180, #81756, #81747, #80999, #81398, #77768, #56341.
#77768 is the only issue in the cluster carrying triage labels (
platform:windows,area:desktop), so it may be a better canonical target than this one.Listed only so they stop being swept in — these look like different faults: #82227 (large transcript render), #83403 (usage-limit), #83453 (Linux), #82073 (Cowork VM HCS).
The bisect: of the seven components in the current workaround, only
--disable-features=WebGPUServiceis load-bearing@15230745073's 2026-08-04 comment gave the MSIX-preserving flag set and said plainly "I did not bisect which individual flag is load-bearing." This is that bisect, plus a confirmation against the app itself and a recovery that needs neither a reinstall nor a reboot.
Environment: Windows 11 Pro 10.0.26200 · Claude Desktop MSIX
1.24012.11.0→1.25927.0.0(both tested, both crash) · Electron 42.7.0 · Chrome 151.0.7922.48 used as a safe control.---
1. Only one of the seven components does anything
The workaround is three switches, but seven independently-removable components:
--disable-features=Vulkan, VulkanFromANGLE, WebGPU, WebGPUService, Dawn (five), plus--use-angle=d3d11and--disable-gpu-compositing. All seven were bisected.An 18-arm design — baseline, full set, leave-one-out over each component, then each component alone. Leave-one-out identifies what is necessary; singles identify what is sufficient. 20
requestAdapter({forceFallbackAdapter:true})calls per arm. Run entirely in Chrome, which takes this identical Code Integrity block routinely and survives it, so the whole matrix costs zero package risk.Two independent full runs agreed on all 18 arms. Event counts were perfectly bimodal — always exactly 4, or exactly 0.
| Arm | CI 3033 | Verdict |
|---|---|---|
| baseline (no flags) | 4 | fires — positive control |
| full set (all seven) | 0 | protects |
| features only (no
--use-angle, no--disable-gpu-compositing) | 0 | protects || leave-one-out minus
Vulkan| 0 | still protects || leave-one-out minus
VulkanFromANGLE| 0 | still protects || leave-one-out minus
WebGPU| 0 | still protects || leave-one-out minus
WebGPUService| 4 | protection collapses || leave-one-out minus
Dawn| 0 | still protects || leave-one-out minus
--use-angle=d3d11| 0 | still protects || leave-one-out minus
--disable-gpu-compositing| 0 | still protects || single:
Vulkan| 4 | no || single:
VulkanFromANGLE| 4 | no || single:
WebGPU| 4 | no || single:
WebGPUService| 0 | sufficient alone || single:
Dawn| 4 | no || single:
--use-angle=d3d11| 4 | no || single:
--disable-gpu-compositing| 4 | no || single:
--disable-gpu| 4 | does not protect |So the working flag set reduces to:
--use-angle=d3d11and--disable-gpu-compositingare inert here. This also independently reproduces two negatives already reported in #81745 —--disable-gpuand--disable-features=WebGPU,Vulkan --use-angle=d3d11both fail to prevent the load.--disable-gpunot protecting is worth dwelling on. It has been recommended and withdrawn in this cluster more than once, and it is the flag people assume the in-app hardware-acceleration toggle maps to (#81840). If that mapping holds, the toggle will not help either.2. It is not the API being removed — the request simply never reaches the ICD
Captured from the page's own console:
| Arm | 3033 |
navigator.gpu| calls | adapters ||---|---|---|---|---|
| baseline | 4 | YES | 20 | 0 |
|
--disable-features=WebGPUService| 0 | YES | 20 | 0 ||
--disable-features=WebGPU| 4 | YES | 20 | 0 |The protective arm still exposes
navigator.gpuand still callsrequestAdaptertwenty times. It doesn't work by amputating WebGPU — it stops the request reaching the SwiftShader ICD.Note also that
--disable-features=WebGPUdoes not even removenavigator.gpuin Chrome 151, which is probably why disabling the renderer-facing feature name has disappointed people. The service side is what gates the ICD load.3. A single confirmation against the MSIX app — sandbox intact
This part is n=1 per arm. The bisect above is Chrome, replicated; what follows is one
protected run against one flagless control on the same version. Treat it as a confirmation
that the Chrome result transfers, not as an independent measurement.
Same version, same stimulus (open a WebGPU page in the in-app Browser pane), nine minutes apart:
| | flagless |
--disable-features=WebGPUService||---|---|---|
|
[Preview] Created session preview context| yes, 11:31:46 | yes, 11:39:30 || CI 3033 | 1 —
vk_swiftshader.dll| 0 || GPU process | died | alive |
| Package | Modified, NeedsRemediation | Ok |
| GPU child
MicrosoftSignedOnly| ON | ON |The preview context — the event that preceded the crash by two seconds without the flag — was reached and nothing followed. Chrome's canary fired 4 × 3033 in the same window, so the machine was still blocking the DLL; the app simply stopped asking for it.
The mitigation stays on. This matters against #81745's finding that
--disable-gpu-sandboxis the operative flag there — that author notes it "costs the GPU process sandbox." One switch on the feature list achieves the same outcome here with CIG untouched. (I did not test--disable-gpu-sandboxor--disable-software-rasterizer, so I am not claiming their result is wrong — only that a sandbox-preserving option exists.)4. Recovery: one reversible DWORD, no reinstall, no reboot
This edits
HKLM, so read it before you run it. It needs an elevated PowerShell, itrefuses unless the package is actually in the fault state, and it will not write unless the
backup export succeeded first.
Then relaunch. Worked twice on this machine, on two different package versions, neither
time needing a restart. This contradicts the "a reboot does not reliably help — only a Repair that re-downloads and re-adds the MSIX clears it" position in #83130, and my own earlier statement in this thread that the reboot was mandatory. Export the key first; double-clicking the
.regundoes it.Do not use the Repair button Windows offers. It does not clear the tamper bit.
Two related observations:
ActivateApplicationthrew0x80073CFCwith zero package processes live. Others report it working, so this varies by machine.0x200000present while the package still reportedOk. Only the low bit (0x2) accompanies the flip.5. This is not a corrupt install
Reproduced on 1.24012.11.0 and 1.25927.0.0, same machine, three hours apart. The update changed nothing relevant:
vk_swiftshader.dllis byte-identical in size (5,546,320), still Authenticode-signedCN="Anthropic, PBC"rather than at Microsoft level, still noCodeIntegrity.catanywhere in the package, still Electron 42.7.0.A fresh package from the official updater crashes identically. Advice in this cluster to reinstall is treating a symptom, and it costs users their local session history —
-PreserveApplicationDatafails0x80073CFAon a store-signed package, so there is no data-preserving reinstall.6. How to pass the flag at all (for #83028)
#83028 reports being unable to launch with flags because Windows blocks direct
.exeinvocation underWindowsApps. The MSIX declares nouap3:AppExecutionAlias, so arguments must go through COMIApplicationActivationManager::ActivateApplication(CLSID45BA127D-10A8-46EA-8AB7-56EA9078943C) — as #81745 also notes.Invoke-CommandInDesktopPackagehangs indefinitely here and is not a usable substitute.Whatever the fix, please expose this as a setting. A COM activation call is not a reasonable ask of an affected user.
---
Related reports
This cluster is heavily fragmented; these all appear to be the same defect or its direct consequences:
Core crash: #80444 · #80689 · #80978 · #80999 · #81123 · #81159 · #81275 · #81398 · #81578 · #81698 · #81745 · #81749 · #81840 · #81933 · #82967 · #83028 · #83117 · #83130 · #83478 · #83744 · #83835 · #83941 · #77768
Package wedged / recovery / data loss: #69987 · #81180 · #81306 · #81747 · #81756 · #81875 · #81947 · #81992 · #82134 · #82381 · #83318 · #83473 · #83893 · #83932
Two worth singling out:
[Preview] capturePreviewScreenshotIfChanged failedappears alongside both crashes — and add the missing link: the CI 3033 fires in the same window. The screenshot failure and the ICD block look like the same event seen from two layers.Limits of this data
forceFallbackAdapterwas bisected. The WebRTC + WebGPU path some reports describe was not.--disable-gpu-sandbox,--disable-software-rasterizer, or the in-app hardware-acceleration toggle.Suggested fix, in preference order
CodeIntegrity.catin the package so the bundled ICD passes CIG. The package currently contains zero.catfiles.Follow-up:
--disable-gpu-sandboxturns Code Integrity Guard off on the GPU process — plus independent confirmation of--use-angle=gl, and a scope correction to my own comment aboveThree things, one of which affects a workaround people are already running.
---
1. Measured: what each workaround does to the GPU process mitigation
Four arms, same trigger (
requestAdapter({forceFallbackAdapter:true})× 20), each in its ownbrowser process with a fresh profile.
MicrosoftSignedOnlyread directly off that arm's ownGPU child by PID; 3033 events attributed by
Execution ProcessIDso a co-running browsercannot contaminate the count.
| Arm | GPU pid |
MicrosoftSignedOnly| CI 3033 | page STATS ||---|---|---|---|---|
| baseline, no flags | 41668 | ON | 4 |
calls=20 adapters=0 null=20||
--disable-features=WebGPUService| 42088 | ON | 0 |calls=20 adapters=0 null=20||
--use-angle=gl| 40660 | ON | 0 |calls=20 adapters=0 null=20||
--disable-gpu-sandbox| 37660 | OFF | 0 |calls=20 adapters=0 null=20|The measurement:
--disable-gpu-sandboxleaves the GPU process running without theMicrosoft-signed-only binary signature policy. The other two silence the 3033 with the
mitigation still enforced. A live GPU pid was read in every row, so
OFFis a real read, nota failed one.
**What I am not claiming. I first wrote that it "lets the load succeed because nothing is
checking any more." That is not supported and I have removed it:
adapters=0on that arm too,exactly as on the protected arms. If the ICD were loading successfully I would expect an
adapter. So the mechanism is not established** — CIG being off may be incidental to whatever
else changing the sandbox does to GPU process startup. What stands is the security-relevant
fact: this flag disables a process mitigation, and the other two do not.
That is worth knowing regardless of mechanism. #81745 flagged that it "costs the GPU process
sandbox"; this quantifies which specific protection is lost.
Check it on your own running instance:
2.
--use-angle=glindependently confirmed;--use-angle=d3d9did not reproduce@nobrainermedia reported in #81275 that
--use-angle=glsurvives the trigger that kills everyD3D backend on Intel Arc. It reproduces here too (row 3 above): 0 × 3033, CIG still ON.
But be careful how much weight that carries — and I nearly overstated it. Their machine is
Intel Arc integrated (drivers
32.0.101.8724/8860); mine is Intel Arc Pro, driver32.0.101.8517. Same vendor, same GPU family. This is a same-family replication on adifferent driver version and a different trigger, not the cross-vendor confirmation I first
wrote it up as. It still moves
--use-angle=glfrom one machine to two, and the triggersdiffer, which is worth something — but someone on NVIDIA or AMD reproducing it would be worth
considerably more.
--use-angle=d3d9, reported working in #80444, did not protect here: 4 × 3033, identicalto baseline. I want to be careful with that. #80444's trigger was ordinary web search on a
Cloudflare-protected page; mine is an explicit forced fallback-adapter request. A flag that
steers the WebGL/compositing backend could matter for one and not the other. This is a
non-reproduction on a different stimulus, not a refutation.
3. Scope correction to my earlier comment
My bisect covered one trigger:
requestAdapter({forceFallbackAdapter:true}). That was inthe limits, but the headline read broader than the evidence.
Established: for a forced fallback-adapter request,
WebGPUServiceis the only one of theseven components that matters. It also holds on the WebRTC + WebGPU path — 2 clean runs,
calls=20 adapters=0, 0 × 3033, against a same-session baseline control that fired 4.*(Disclosure: the first attempt at that arm came back VOID — it did not get its own browser
process, so its flags were never applied. It is recorded as VOID in the sweep CSV and was
re-run twice; only the re-runs are cited here.)*
Not established: that it covers the triggers most people actually hit — Cloudflare
Turnstile (#80689, #81275), WebGL capability probes (#81275), MediaPipe tasks-vision (#83318),
or a failed preview-screenshot capture (#83941).
4. Hypothesis, not a finding: why reports may be so inconsistent
On this machine, which has working hardware WebGPU:
| Trigger | CI 3033 | adapters returned |
|---|---|---|
| plain
requestAdapter()| 0 | 20 (real hardware adapters) ||
powerPreference:'low-power'| 0 | 20 ||
forceFallbackAdapter:true| 4 | 0 || WebRTC +
forceFallbackAdapter| 4 | 0 |*(Rows 1, 2 and 4 are from the trigger sweep; row 3 is the baseline arm of the mitigation
table in section 1. All four are 20 reps, PID-attributed, each in its own browser process.)*
Ordinary WebGPU use never touches SwiftShader here — a hardware adapter is returned and the ICD
is never consulted. The blocked load required something to ask for a fallback adapter.
The speculative part, offered as a hypothesis to test rather than a result: if a machine has
no hardware WebGPU adapter available, or it is blocklisted, then a plain
requestAdapter()would fall back on its own and no page would need to do anything unusual. That would predict
easier reproduction on integrated-Intel-only (#83028, "no workaround") and on hybrid laptops
running on the iGPU (#81578 identifies iGPU-only compositing as the failing configuration).
I have not tested this — I have no hardware that lacks WebGPU.
And one data point already cuts against the simple version of it. @nobrainermedia's machine
is Intel Arc, like mine, and crashes on ordinary content; mine has working hardware WebGPU and
needs an explicitly forced fallback. Same GPU family, different behaviour — so adapter
availability alone cannot be the whole discriminator. Driver version (
8517here vs8724/8860there) and page content are both still in play.Cheap check for anyone affected: open
chrome://gpuin the app's Browser pane and look atwhether WebGPU reports a hardware adapter. If it does not, and the hypothesis holds, you should
reproduce far more readily than I can.
Credit I skipped earlier
whether the Register step can actually run, matching
0x80073D02.Stop-Service CoworkVMService -ForcebeforeAdd-AppxPackage -Register.hardware-acceleration toggle does not map to
--disable-gpu— the GPU child runs--use-angle=d3d11-warp-webgl, loadsD3D10Warp.dll, and dies anyway.Method and limits
Chrome 151.0.7922.48, Windows 11 Pro 10.0.26200, Intel Arc Pro Graphics, driver
32.0.101.8517 (no discrete GPU), 20 reps/arm, one arm per browser process, fresh profile
each, events attributed by PID.
WebGPUServiceresulthere is n=2 plus a control. The seven-component bisect in my earlier comment was one
PID-attributed 18-arm run plus an earlier unattributed 18-arm run that agreed on every arm —
the second predates the attribution fix, so it is corroboration rather than a second
independent measurement.
path, so I cannot show the WebGL code ran at all. Not evidence in either direction.
--disable-gpu-sandboxis unexplained, as above.probably why my trigger has to be synthetic in the first place.
The two tests I most want from someone else
--disable-features=WebGPUServiceagainst a real content trigger — a Turnstile page,#81275's reproducing site, or #83318's MediaPipe page. My probe is synthetic and that is the
weakest link in the chain.
--use-angle=glvs--disable-features=WebGPUServicehead-to-head, one machine, onetrigger, both directions. Two workarounds, two mechanisms, no comparison yet.
Confirmed on a second, very different machine: Windows 10 Pro 19045 + AMD Radeon integrated graphics (so not Win11/Intel-Arc/VBS-specific). Claude Desktop MSIX 1.26832.0. 9/9 browser-preview crashes since Jul 25, all with exit_code=101457950 (0x060C201E). At the exact second of each crash, CodeIntegrity/Operational logs the same pair: Event 3033 (claude.exe attempted to load app\vk_swiftshader.dll 'did not meet the Microsoft signing level requirements') + Event 3010 x2 (AppxMetadata\CodeIntegrity.cat unable to load, 0xC000003A - the file is absent from the package, verified on disk). vk_swiftshader.dll Authenticode: Valid, CN='Anthropic, PBC' - not Microsoft level. On this machine the app hangs rather than self-terminating, which then cascades into the updater uninstalling the package (0x80070020 -> RemoveForAllUsers) - detailed in #81875, which appears to share this root cause. Two AMD driver versions (31.0.21924.61, 31.0.21925.1001) behave identically, consistent with the packaging diagnosis.
Workaround confirmed on the second machine as well (Win10 19045 + AMD Radeon iGPU, reported above): replaced the MSIX install with the non-MSIX build ('Claude Setup.exe --exe', v1.26832.0). Browser preview now opens and renders with no GPU-process death and no new CodeIntegrity 3033 - previously 10/10 previews were fatal on this machine (last MSIX crash 22:56, exe build installed 22:57, preview verified working minutes later). Also closes the loop on #81875: with no MSIX package to flip to NeedsRemediation, the uninstall/reinstall treadmill is gone.
Confirming the CIG + missing-catalog diagnosis on 1.26832.0.0 (Windows 11 10.0.26200, Intel iGPU, Smart App Control off, HVCI on). Same 3010
0xC000003A/ 3033 pair, same outcome.Four things I didn't find in this thread or #83130 — all small, but each cost me hours, so posting in case it saves someone else the detour.
1. The installed package is byte-identical while Windows calls it
Modified.I verified every file in the install against the signed
AppxBlockMap.xml(per-block SHA-256, the same blocks the signature covers):So
Modified, NeedsRemediationis a false tamper verdict derived entirely from the CI failure — nothing on disk is actually altered. Worth establishing before anyone burns time hunting for corruption, a bad download, or AV interference.2. Windows names the offending binary in the package-status key — and patching that key is futile.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModel\StateChange\PackageList\Claude_1.26832.0.0_x64__pzs8sxrjxfjjccontains:That's a direct, machine-readable causal link from the 3033 block to the
Modifiedflag — useful for triage/telemetry, since (as #83130 notes) Crashpad produces nothing.Setting
PackageStatusback to0reports success but does not hold:Microsoft-Windows-AppModel-Runtimeshows the status flapping0x2 ↔ 0x80002on every subsequent activation attempt. It is re-derived, not stored. Not a workaround.3.
--disable-software-rasterizerdoes not prevent the load.Tested with the argument confirmed delivered to the process. The app still died in ~20 s,
PackageStatuswent0 → 2again, and a fresh 3033 was logged. The flag governs the SwiftShader rasterizer fallback; the load here comes from Vulkan ICD enumeration via the packagedapp\vk_swiftshader_icd.json, which that flag doesn't gate. (--disable-gpu/--in-process-gputarget the right layer, but I have not verified them.)4. Caution for anyone taking the non-MSIX / portable workaround recommended above.
Remove-AppxPackageon the MSIX deregisters the manifest-declareduap3:Protocol Name="claude", and that deletes the entireHKCU\Software\Classes\claudeProgID — including the registration a non-MSIX or portable install had already made for itself, because both live at the same key.Result:
claude://deep links and OAuth callbacks fail silently after you uninstall the MSIX. Nothing errors; the callback just never arrives.Fix is to re-create the ProgID pointing at the non-MSIX executable:
Suggest verifying
claude://still resolves after any Claude package removal.I can independently reproduce what appears to be the same issue on current Claude Desktop 1.26832.0.0 on Windows x64.
A reinstall temporarily restores the package to Status: Ok, but during normal Claude Code/Desktop use it transitions live to:
Modified, NeedsRemediation
I monitored the transition in PowerShell:
12:05:41 | STATUS=Ok | VERSION=1.26832.0.0 | CLAUDE_PROCESSES=12
12:06:42 | STATUS=Modified, NeedsRemediation | VERSION=1.26832.0.0 | CLAUDE_PROCESSES=2
Five seconds before the package status changed, Windows CodeIntegrity/Operational logged:
Event 3010 x3: unable to load
...\Claude_1.26832.0.0_x64__pzs8sxrjxfjjc\AppxMetadata\CodeIntegrity.cat
with status 0xC000003A
Event 3033: claude.exe attempted to load
...\app\vk_swiftshader.dll
which did not meet Microsoft signing-level requirements.
After reinstall, while the package is still Status: Ok, I confirmed:
AppxMetadata = False
CodeIntegrity.cat = False
AppxSignature.p7x = True
AppxBlockMap.xml = True
vk_swiftshader.dll = True
So the missing AppxMetadata/CodeIntegrity.cat is present before the failure state occurs, rather than being deleted during corruption.
I also captured the reproduction with Sysinternals Process Monitor. I did not observe a write/delete/rename operation against the Claude package that would explain the transition; the failure coincides with the GPU process accessing vk_swiftshader.dll / Windows Code Integrity validation rather than another process visibly modifying the MSIX contents.
Windows Defender showed no threat detection or remediation events during the failure window.
Windows Settings → Repair fails with “We couldn't repair this app”. Re-running the Claude installer over the existing installation restores it in ~20 seconds and preserves chat/context data, but the failure subsequently recurs.
This therefore looks consistent with #81341 / #80999 rather than conventional package-file corruption, and confirms the issue still reproduces on 1.26832.0.0.
Two additions: a datapoint on 1.28929.0.0, and a positive control that is still
inside MSIX — every control in this thread so far leaves MSIX (Chrome, the
--exebuild), which leaves open the question of whether this is fixable without doing that.
1. Unchanged on 1.28929.0.0
Same machine as my 2026-08-04 comment
(Windows 11 25H2 26200.8875, Intel Iris Xe, HVCI not running, Smart App Control off).
Claude Desktop
1.28929.0.0, MSIX,SignatureKind = Developer. All three checkablelinks in the chain are unchanged:
| Link | Check | Result |
|---|---|---|
| CIG on the GPU child |
Get-ProcessMitigation -Id <gpu pid>|MicrosoftSignedOnly: ON,AllowStoreSignedBinaries: OFF|| App ships mitigating defaults? | search
app\resources\app.asar(40 MB) | zero occurrences ofdisable-featuresoruse-angle|| Catalog present? |
AppxMetadata\CodeIntegrity.cat| still absent on disk |To be explicit about what this is not: I did not re-run the destructive no-flag
reproduction on this version — I did that on
1.24012.11.0(reported above) and itcosts a
NeedsRemediationpackage each time. Three unchanged links is strong evidence,not proof.
2. A positive control that stays inside MSIX
OpenAI.Codex 26.803.10989.0is on this same machine: also Electron, also MSIX, and itships the same DLL. Side by side:
| | Claude Desktop
1.28929.0.0| OpenAI.Codex26.803.10989.0||---|---|---|
|
app\vk_swiftshader.dll| present | also present ||
AppxMetadata\CodeIntegrity.cat| absent | present ||
SignatureKind|Developer|Store|Two things follow.
Shipping the catalog is sufficient, and it does not require dropping the DLL or
leaving MSIX. A sibling Electron MSIX app on the same Windows install, under the same
CI policy, with the same vendor-supplied SwiftShader ICD, does not hit this — because
the package carries a CodeIntegrity catalog, so the DLL satisfies the GPU process's
signing-level requirement. That makes "ship
AppxMetadata\CodeIntegrity.cat" (alreadysuggested in the original report) the smallest fix that keeps MSIX, keeps CIG enforced
on the GPU process, and needs no Chromium flag changes.
Corollary worth stating, because it is easy to get backwards: the continued presence
of
vk_swiftshader.dllin a build says nothing about whether this is fixed. Codex stillships it. I had been using "DLL still in the package" as a cheap staleness check for new
Claude builds and had to discard that — the catalog is the discriminator, not the DLL.
For anyone reproducing the comparison:
Confirmed on 1.28929.0 (current Store/MSIX build) — the CIG kill described in the OP is still present, and CodeIntegrity events are second-exact with both crashes on this machine. Adding one new datapoint: a lighter, MSIX-compatible mitigation that has held so far.
Environment: Windows 11 26100 (10.0.26100.8972), i5-12500 / UHD Graphics 770 only (no dGPU), Intel driver 32.0.101.7088 (newest Intel offers as of 2026-08), 3440×1440 @ 100 Hz, 16 GB RAM, Defender only.
Crash ↔ preview ↔ CodeIntegrity timeline (2/2 crashes)
main.log:Microsoft-Windows-CodeIntegrity/Operational, second-exact with both:Control group reproduced here too: Chrome 151 on the same machine logs the identical 3033 for its own
vk_swiftshader.dllevery ~5 minutes and never dies — non-MSIX, exactly as the OP describes.Consistent with the OP's analysis
Crashpad\reportsempty) and no WER entry — loader-level kill, not a normal exception.0x80073D02until leftovers were killed, then recovered after "ACLs repaired" (did not reach NeedsRemediation on this machine).Mitigation datapoint (MSIX-compatible, no reinstall)
Toggling off the preview feature "hardware acceleration for the built-in browser" relaunches the GPU process with
--use-angle=d3d11-warp-webgl. WebGL then goes through inbox D3D11 WARP (Microsoft-signed) instead of the Vulkan/SwiftShader fallback, so CIG never seesvk_swiftshader.dll:--exeinstaller.Same signature also reported in #85967, #86248, #85424, #83744, #81840 — may help triage/dedup.
Independent confirmation of the root cause on a second machine — with to-the-second Code Integrity log correlation, a deterministic trigger (Google Sign-In pages), and a verified step-by-step workaround using the official installer's undocumented
--exeswitch.Environment
Claude_..._pzs8sxrjxfjjc, SignatureKind=Developer — installed from claude.ai download, not the Store)GPU process gone: { type: 'GPU', reason: 'crashed', exitCode: 101457950 }(= 0x060C201E), whole app dies within the same second, package flaggedNeedsRemediation→RepairPackageOperationin AppXDeploymentServer log ~30-60 s after each crash. No WER, no Event Log Application entries, empty Crashpad.1. Code Integrity events correlate with every crash to the second
Four crashes on 2026-08-13 at 15:34:21, 16:04:19, 17:43:15, 17:49:50 (local).
Microsoft-Windows-CodeIntegrity/Operationalhas, at exactly those timestamps, Event 3033:each accompanied by 3× Event 3010:
Verified on the live GPU child process (
Get-ProcessMitigation):MicrosoftSignedOnly: ON,AllowStoreSignedBinaries: OFF.vk_swiftshader.dllAuthenticode signer is "Anthropic, PBC" (valid, but not a Microsoft signing level), andAppxMetadata\CodeIntegrity.catdoes not exist in the package — still missing in 1.30096.1.0 MSIX as of 2026-08-13. This independently confirms the OP's WinDbg analysis (ntdll!LdrAppxHandleIntegrityFailure) and #85901.2. New datapoint: deterministic trigger — Google Sign-In / anti-bot GPU fingerprinting
Every crash was triggered by a page running GPU fingerprinting (Google botguard / GSI One Tap / Cloudflare Turnstile). Renderer console sequence, identical each time, ~1 s before death:
Notes: it also crashed on a plain
google.com/searchresults page (botguard probes there too), so this is not OAuth-specific — the WebGL/WebGPU probe burst is what makes the GPU process attempt the SwiftShader load. This matches #85145 (Google OAuth), #80520 (Supabase login), #86146/#80444 (Turnstile). FedCM itself is not the mechanism — just a marker of the login path.Regression timeline on this machine: zero crashes through July (1.22209.x → 1.24012.9, heavy daily use); first crash ever 2026-08-03 23:40, ~3.5 h after auto-update 1.24012.9 → 1.24012.11; persisted through 1.26832.0 and 1.28929.0. NVIDIA driver updated mid-crash-cluster (changed nothing), Windows CU came later, Parsec VDD unchanged since April, and DLL-injection was ruled out (module enumeration across all 15 Claude processes: no third-party DLLs). Consistent with OP: disabling hardware acceleration does not help (#80689, #86265) because the failure is the DLL load in the GPU process, not rendering itself.
3. Verified workaround: official bootstrapper's
--exeswitch (Squirrel build)The public installer (
claude.ai/api/desktop/win32/x64/setup/latest/redirect→Claude Setup.exe, ~7 MB Go bootstrapper) defaults to MSIX, which is why "reinstall from the website" never fixes this. But its strings reveal supported switches:--exe,--msix,--msix-path,--all-users,--uninstall("ERROR: --exe and --msix cannot both be specified", "Offering Squirrel fallback", "User chose Squirrel fallback").installs the classic Squirrel build to
%LOCALAPPDATA%\AnthropicClaude\(it removed the MSIX registration itself; all user data survived —%APPDATA%\Claudeand~/.claudeare shared between builds, no re-login needed).Result: same CIG policy on the Squirrel build's GPU process (
MicrosoftSignedOnly: ON), then opened the page that previously killed the app 100% of the time (app.base44.com/register): full GSI/FedCM sequence appeared in the console — GPU process survived, no crash, no new 3033 events, app fully functional. MSIX: 10/10 fatal on this machine; Squirrel: 0 so far. Confirms OP's 15/15 vs 0/15.Ask
Ship a valid
AppxMetadata\CodeIntegrity.cat(or a Microsoft-signed/store-signed SwiftShader, or drop theMicrosoftSignedOnlymitigation on the GPU process in MSIX), and until then please document--exe— this bug destroys the MSIX package on every occurrence (NeedsRemediation→ Repair loop) and has repeatedly corrupted users' local session indexes.(Separate issue seen alongside, not the crash cause:
TypeError: Cannot destructure property 'preloadScripts' of 'binding.startupData' as it is nullin sandboxed renderers — that's an Electron ≥42.3.3 regression from electron/electron#51602 / #51831 affecting sandboxed child WebContentsViews/popups, tracked in #79846; it never kills a process.)Additional evidence: Claude Desktop 1.30096.5 MSIX pure startup crash + clean A/B test
Title
Claude Desktop 1.30096.5 MSIX crashes on startup due to Code Integrity rejection of
vk_swiftshader.dll(Event 3033/3010); official Squirrel build of the exact same version works on the identical machineEnvironment
Claude_1.30096.5.0_x64__pzs8sxrjxfjjcC:\Program Files\WindowsApps\Claude_1.30096.5.0_x64__pzs8sxrjxfjjcclaude.exeSymptoms
After successful MSIX installation, Claude Desktop launches and crashes within a few seconds.
Package status becomes
Modified, NeedsRemediation. Reinstall does not fix it.Code Integrity evidence
claude.exeattempted to load...\Claude_1.30096.5.0_x64__pzs8sxrjxfjjc\app\vk_swiftshader.dllthat did not meet the Microsoft signing level requirements.
Code Integrity was unable to load
...\AppxMetadata\CodeIntegrity.catStatus:
0xC000003AAppxMetadatadirectory does not exist (Test-PathandGet-ChildItemboth confirm this).vk_swiftshader.dllitself has a valid Authenticode signature:(This is distinct from satisfying the required Microsoft Code Integrity signing level.)
Key A/B test (same machine, same version)
| Build | Result |
|-------|--------|
| MSIX (1.30096.5) | Crashes within seconds (3033 + 3010) →
Modified, NeedsRemediation|| Squirrel / EXE (
Claude Setup.exe --exe, same version 1.30096.5) | Launches successfully and remains stable (multiple Claude processes stay alive) |Get-AppxPackage Claudereturns nothing).This forms a very clean isolation: the problem is MSIX-specific (Code Integrity / packaging), not application code, GPU drivers, or general system configuration.
Additional note
Chrome on the same machine also generates Event 3033 for its own
vk_swiftshader.dll/vulkan-1.dll, but does not crash.Workaround
Install the official Squirrel/EXE build using:
Claude Setup.exe --exeSuspected area
The evidence strongly suggests an MSIX-specific Code Integrity / packaging compatibility issue (missing
AppxMetadata\CodeIntegrity.cat+ vendor-signedvk_swiftshader.dllunder Microsoft signing level requirements).This report adds a pure startup reproduction on the latest build (1.30096.5) with a rigorous same-machine A/B test, complementing the existing findings in this thread.
Independent confirmation on a different GPU vendor and on current builds — same root cause, same second-exact Code Integrity signature. Adding the data points that were not in the thread yet.
Environment: Windows 11 Pro 26200, desktop i9-9900K, NVIDIA GeForce GTX 1080 (drivers 560.94 and 582.66 both affected) + Intel UHD 630 iGPU; Claude Desktop MSIX
Claude_<ver>_x64__pzs8sxrjxfjjc, every version from 1.24012.9 through 1.30096.5 (2026-08-17) still affected. Package folder has noAppxMetadataat all;app\vk_swiftshader.dllis intact (all 85 blocks matchAppxBlockMap.xml, Authenticode valid, Anthropic PBC).Kills: 11 on this machine since 2026-07-31 (8 spontaneous, 3 deliberate reproductions today), each taking down every running Claude Code session and subagent.
main.logshows the sameGPU process gone: { reason: 'crashed', exitCode: 101457950 }(= 0x060C201E), then nothing until manual relaunch.Trigger: the in-app Browser pane loading a page that runs a Cloudflare challenge / Turnstile widget (an "Just a moment…" interstitial on a third-party site, our own sites' Turnstile forms). Those pages probe WebGPU including the fallback adapter, so Dawn loads SwiftShader. Isolated
navigator.gpu.requestAdapter()/requestDevice()on the hardware adapter and WebGL contexts do not crash the pane; the challenge page does, 4/4 today. Renderer log at the crash second:powerPreference option is currently ignored when calling requestAdapter()×2 →A valid external Instance reference no longer exists→WebGL: CONTEXT_LOST_WEBGL.Not the GPU / not the driver: reproduced with the Intel iGPU disabled in Device Manager (NVIDIA-only), identical crash. Zero TDR / driver-reset events in the System log at any crash time.
GPU child (procdump
-e -tattached to--type=gpu-process), 2026-08-17 18:19:52: two first-chanceE06D7363 _com_error, then unhandled 0x060C201E raised inntdll!LdrAppxHandleIntegrityFailure, called underLdrLoadDll ← KERNELBASE!LoadLibraryExAwith the path…\WindowsApps\Claude_1.30096.5.0_x64__pzs8sxrjxfjjc\app\vk_swiftshader.dllon the stack, belowdxgi.dllframes. Same second,Microsoft-Windows-CodeIntegrity/Operational:Every crash inside the CI log's retention window (2026-08-09, 08-10, 08-17 ×4) has the 3033 event at the same second.
Browser process: procdump on the main process caught it dying with
0xC000001D(illegal instruction, i.e. a CHECK/FATAL) atclaude.exe+0x6dd36fa(1.30096.5) about one second after the GPU child died — consistent with "GPU process isn't usable. Goodbye." The window closes on its own; leftover session child processes then make the Settings "Reset/Repair" fail until killed.Happy to share the GPU-child and browser-process dumps privately if useful. Moving to the non-MSIX build as the workaround, per the thread.
Same failure on Windows 11 26200 with a discrete NVIDIA GPU (RTX 4070 Ti SUPER, driver 32.0.15.9649), MSIX build 1.30096.5.0,
SignatureKind: Developer. Adding four things this thread doesn't have yet, including a working command-line mitigation for people who can't switch to the--exebuild.1. The CIG block itself is benign — a same-machine control proves it
I decoded the raw event fields rather than reading the message text. Event 3033 carries:
and the paired 3089 shows CI read the certificate perfectly well —
PublisherName = Anthropic, PBC,IssuerName = DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1,KnownRoot = 1, validity 2025-10-14 → 2026-10-20,VerificationError = 7.So this is not a broken signature.
RequestedPolicy = 8means the loader was asked for Microsoft signing level. No vendor Authenticode certificate can ever satisfy that — re-signingvk_swiftshader.dll, or shipping the missingAppxMetadata\CodeIntegrity.cat, cannot fix this, because the requested level is Microsoft, not Store.The control that settles it: on this same machine, Google Chrome (non-MSIX,
C:\Program Files\Google\Chrome\Application\chrome.exe) produces 569 identical 3033 blocks with zero crashes. Full breakdown of every 3033 event in my log:| Count | Blocked file | Requesting process | RequestedPolicy |
|---|---|---|---|
| 285 |
vulkan-1.dll| chrome.exe | 8 || 284 |
vk_swiftshader.dll| chrome.exe | 8 || 5 |
vk_swiftshader.dll| claude.exe (MSIX) | 8 || 1 |
vulkan-1.dll| claude.exe (MSIX) | 8 |Chrome: 569 blocks, 0 crashes. Claude Desktop: 6 blocks, 6 crashes — 1:1, every single one.
This matches the
ntdll!LdrAppxHandleIntegrityFailureframe already identified in this issue: the block is routine and non-fatal outside an MSIX container, and fatal inside one. The bug is the MSIX loader's integrity-failure escalation path, not the DLL.2. Renaming
vk_swiftshader.dlldoes not work — it just moves which DLL it dies onThe widely shared workaround (renaming
vk_swiftshader.dllandvk_swiftshader_icd.jsonto.off) did not stop the crashes here. With both files renamed, the next crash blockedvulkan-1.dllinstead, sameRequestedPolicy = 8, sameexitCode: 101457950. Chromium simply falls one step further down the same fallback chain and dies at the next non-Microsoft-signed DLL.3. Windows actively reverts the rename — it isn't auto-update that undoes it
Several reports here assume a staged update restores the DLL. That's not what happens. Renaming files inside
C:\Program Files\WindowsApps\...flips the package toStatus: Modified, NeedsRemediation, and Windows' own MSIX remediation restores the original filenames, unprompted, with no update involved.I verified the restored file is a genuine copy, not a re-download artifact — the remediated
vk_swiftshader.dlland my renamed.offcopy are byte-identical:This is also, I think, the mechanism behind the "forces MSIX repair cycles" symptom in #85540 and the "orphaned processes block MSIX re-activation" symptom in #87388: the rename workaround puts the package into a permanent modify/remediate loop. Anyone who applied it should undo it — it costs package integrity and buys nothing.
4. Working mitigation without leaving MSIX: launch with GPU switches
If Chromium never attempts those loads, CI has nothing to block and the fatal path is unreachable. Launching the packaged executable directly accepts command-line switches and — importantly — keeps full package identity:
Verified the switches reach the GPU process (
--type=gpu-process --use-angle=d3d11 ... --disable-features=...,Vulkan) and that MSIX identity and data virtualization are intact, so settings and history are not split to a second location:The package ships no
AppExecutionAlias, so a shortcut has to target the executable inside the package directory. Resolving it at launch time viaGet-AppxPackagekeeps it working across version updates:Stable here so far. This is a mitigation, not a fix — the underlying issue is that a blocked DLL load kills the entire application.
Suggested fixes, in order of preference
LdrAppxHandleIntegrityFailureinside the MSIX container needs to be caught.vulkan-1.dllandvk_swiftshader.dllare unreachable by construction, on every machine. Compiling those switches in for packaged builds removes the whole failure class.Re-signing the DLL and shipping
CodeIntegrity.catare both dead ends — worth saying explicitly, because the missing catalog (event 3010,0xC000003A) looks like the cause and isn't. Chrome has no MSIX package at all and hits the identical block.Follow-up on the command-line mitigation from @aPipixia123456 — it was not sufficient for the Cloudflare-challenge trigger, but an extended switch set is. Same machine as my comment above, now on MSIX 1.32352.0.0 (auto-updated tonight; still no
AppxMetadata).Three switches alone → still fatal. Launched
app\Claude.exe --use-angle=d3d11 --disable-features=Vulkan --disable-software-rasterizer(verified on the GPU child's command line:--use-angle=d3d11 --disable-features=...,Vulkan), opened a page behind a Cloudflare "Just a moment…" challenge in the Browser pane → within 4 s: CI Event 3033 forapp\vk_swiftshader.dll(sameRequestedPolicypath),GPU process gone: exitCode 101457950, app dead. Reason: that trigger callsnavigator.gpu.requestAdapter()and asks for the fallback adapter, so Dawn loads SwiftShader on its own path —--disable-features=Vulkan/--disable-software-rasterizercover Skia/ANGLE Vulkan and the WebGL software fallback, not the WebGPU fallback adapter. Triggers that only probe WebGL (Google Sign-In in the comment above) never reach it, which is why the three switches held there.Adding the WebGPU switches → survives. Launched with
(renderers get
--disable-blink-features=WebGPU, the GPU child gets--disable-features=...,Vulkan,WebGPUService). In the panenavigator.gpustill exists butrequestAdapter()returnsnullin ~1 ms; the same Cloudflare page then logsFailed to create WebGPU Context Provider×2, no CI 3033, GPU process stays alive, the challenge even passes and the site renders. Deterministic on this machine: 5/5 fatal with the original trigger before, 0/1 with the extended set (will report if that changes). MSIX identity, Cowork and user data untouched.Practical shape (resolves the package path at launch, survives updates):
Caveat: this removes WebGPU from the in-app browser entirely, and every launch has to go through this command (a Start-menu launch has no switches). Still a mitigation; the fix remains "a blocked DLL load must not take the app down".
1.32885.1.0: a trigger outside the Browser pane, and a same-machine CIG observation
Fourth occurrence on this machine (Windows 11 Pro 26200). Three things worth adding: the trigger surface may be wider than the Browser pane, one observation about what CIG does and does not block here, and a set of newer reports carrying this symptom without this mechanism.
1. This occurrence did not involve the Browser pane
#87052 reproduces this crash through the Browser pane, using the
preview_starttool explicitly. This occurrence appears not to have.What I can show: no Browser-pane server was recorded as running. The last
[Launch] Updating active servers storeline anywhere in the log before the crash is 2026-08-14 14:45, readingcount: 0, five days earlier. The Turnstile widget rendered in the app's own main window during Claude's authentication challenge:Four seconds from iframe to dead GPU, matching the "1 to 4 seconds after navigation" window in #87052.
Two caveats, so nobody over-reads this. A second app instance launched inside that same four seconds (
Starting app/Not main instance, returning early/second-instance: suppressing duplicate argv), and it is most likely what drove the navigation — I cannot show it was irrelevant. And a[WarmLifecycle:preview] Warming up sessionline appears at 09:16 the same morning, seven hours earlier, so I can say no preview server was recorded active, not that no preview machinery existed in the process. Someone with a cleaner reproduction should confirm before this is treated as established.If it does hold, a fix scoped only to the preview pane would not cover it.
2. A CIG-enforcing GPU child on this machine did load a
vk_swiftshader.dllThree copies of
vk_swiftshader.dllexist on this machine. CodeIntegrity 3033 counts, last 30 days:| Origin | Bytes | Authenticode signer | 3033 |
|---|---|---|---|
| Chrome 151.0.7922.169 | 5,457,560 |
CN=Google LLC| 461 || Claude 1.32885.1.0 (MSIX) | 5,546,832 |
CN="Anthropic, PBC"| 5 (each fatal) || Edge 151.0.4129.78 | 4,723,528 |
CN=Microsoft Corporation| 0 |These browsers see very different usage on this machine, so the counts are not a controlled comparison — the zero is not by itself evidence. The controlled part is this: on 2026-08-05 I ran the same probe (
requestAdapter({forceFallbackAdapter:true})×20) in Edge with a fresh--user-data-dir, attributing events byExecution ProcessID. The Edge GPU child hadMicrosoftSignedOnly = ON,vk_swiftshader.dllappeared in its loaded modules, and zero 3033 were attributed to that run.So the block is not unconditional under CIG: a GPU child with
MicrosoftSignedOnlyenforcing did load a file of this name on this machine.What I cannot claim is that the signer is the reason. The Edge binary differs from the packaged one in build, package context and policy as well as certificate, so signer is not isolated from those. One thing is still worth saying: Chrome's Google-signed copy is rejected here too, and that signature is valid and current — so "use a more reputable signer" is not on its own the answer.
What this does not show. Edge returned
adapters=0, null=20— no working adapter was obtained on any of the 20 calls, so this is evidence about the load being permitted, not about a functioning software-WebGPU path. The three files are different builds, not one binary with three certificates: the byte sizes differ and Edge 151 is not Chromium 148. It is n=1, one machine, and Edge has since moved from 151.0.4129.59 to .78. Someone able to test a Microsoft-signed and a third-party-signed build of the same Chromium revision would settle what this cannot.The package still ships zero
.catfiles and has noAppxMetadatadirectory on 1.32885.1.0. Shipping aCodeIntegrity.catis the mechanism intended for exactly this case, and looks like the most direct thing to try.Not a user workaround — swapping Edge's copy into the package is itself the tamper trigger, the install root is TrustedInstaller-owned, and the ABI pairing is unsupported. The user-side mitigation remains
--disable-features=WebGPUService, which keeps CIG enforced.3. This occurrence, for the record
App auto-updated 1.32352.1 → 1.32885.1 at 00:53; the instance running at crash time carried no mitigation switches. Signature identical to this issue: exit
101457950, CodeIntegrity 3033 onapp\vk_swiftshader.dllat 16:22:57, registryPackageStatus = 2withBinaryName = …\app\vk_swiftshader.dll, packageModified, NeedsRemediation.Windows then ran two Register operations of its own (
AppXDeploymentServer/Operationalevent 400 at 16:23:03 and 16:24:01, each preceded by 649 ACLs repaired successfully). Both reported success; the package was stillModified, NeedsRemediationafterwards. On this machine, settingPackageStatus = 0returnedStatus: Okimmediately and the app launched — no reboot needed, which is the first time I have confirmed that here.4. Newer reports that may belong here
None of these mention
vk_swiftshaderin the body — they carry the symptom without the mechanism documented in this thread, which may be why they keep being filed separately:Same crash signature (
101457950and/or Turnstile in the body): #87052 (has repro), #85424, #81698, #81836, #80306Possibly a different route to the same end state — these reach
Modified, NeedsRemediationaround Cowork/update activity rather than a GPU crash, and 5 of 6 carry thearea:coworklabel: #87610, #87969, #86530, #87097, #53247, #84851. I classified these from labels and body text rather than reading each in full, so treat it as a hint for triage, not a finding.Authored by AI (Claude - Opus 5 w. ultracode-thinking), approved by me - a human :)
---
Independent confirmation of the CIG /
vk_swiftshader.dlldiagnosis — 13 crashes, 13 matching Code Integrity events, 1:1I've been tracking this crash on a separate machine since 2026-07-27 and reporting it on #81275,
where I had it filed as a GPU/WebGL problem. This issue's diagnosis is correct and mine was
wrong. Here is the verification, plus a control that I think closes it.
13 crashes ↔ 13
CodeIntegrity3033 events, same second, no exceptionsEvery
GPU process gone … exitCode 101457950on this machine has a Code Integrity 3033 at thesame second — and the retained log contains exactly 13 of them for
claude.exe. No 3033without a crash; no crash without a 3033.
| crash (
main*.log) | CI 3033 | | crash | CI 3033 ||---|---|---|---|---|
| 2026-07-27 16:23:08 | 16:23:08 | | 2026-08-07 16:55:50 | 16:55:49 |
| 2026-07-27 16:29:09 | 16:29:09 | | 2026-08-13 20:09:04 | 20:09:04 |
| 2026-07-27 17:06:05 | 17:06:05 | | 2026-08-14 19:53:09 | 19:53:09 |
| 2026-08-05 12:42:58 | 12:42:58 | | 2026-08-15 13:55:03 | 13:55:03 |
| 2026-08-05 12:52:08 | 12:52:08 | | 2026-08-18 19:30:14 | 19:30:13 |
| 2026-08-07 16:31:16 | 16:31:15 | | 2026-08-19 21:25:35 | 21:25:35 |
| 2026-08-07 16:35:13 | 16:35:13 | | | |
On this machine:
vk_swiftshader.dllis 5,546,832 bytes, Authenticode Valid, signerCN="Anthropic, PBC" … OID.2.5.4.15=Private Organization.AppxMetadata\CodeIntegrity.catisabsent — the entire
AppxMetadatadirectory is absent from the package.⭐ Control: non-MSIX Chrome hits the identical block and does not die
On the same machine, same GPU and driver, Google Chrome 151.0.7922.138 (non-MSIX) logged the
same 3033 against its own
vk_swiftshader.dll— and kept running.⇒ The signing block is generic Chromium-under-CIG behaviour. It is fatal only inside the
MSIX container. That makes this a packaging/signing defect, not a GPU, driver or Chromium bug
— and it means no GPU-side change can fix it.
Why there is no crash dump — this is important for triage
I spent weeks reporting "no minidump, no WER entry,
Crashpad\reportsempty, 13/13" as a mystery.Under this diagnosis it isn't one: **the process is killed at DLL load time, so there is no
fault and no exception to capture. Anthropic has no crash telemetry for this by construction**
— which likely explains why an issue with this many duplicates has gone unacknowledged.
Nine builds of evidence that no renderer-side change helps
Same deterministic repro, every build, ~30–35 s from page load to whole-app death:
| build | result | notable |
|---|---|---|
| 1.24012.9 → 1.30096.5 (6 builds) | ⛔ | Electron 42.7.0, ANGLE 2.1.27535 throughout |
| 1.32352.1 | ⛔ | Electron → 42.9.2, ANGLE → 2.1.27552 — no effect |
| 1.32885.1 | ⛔ |
app.asardown to 28.86 MB from 38.2 (~25% of the bundle) — no effect |Consistent with the diagnosis: neither the graphics stack nor app code is where the fault lives.
GPU process switches here, in case they're useful — note there is no
--use-angleor--use-gl:Retracting a red herring I published
On #81275 I reported that every crash was preceded by exactly 19
getInternalformatParameterWebGL warnings, and treated that invariant as the strongest lead.It is a symptom of the page's capability probing, not the fault — and it stopped appearing
entirely from 1.28929.0 onward while the crash continued unchanged. Anyone triaging on that
signature will find nothing on current builds and may wrongly conclude the bug is gone.
The ask
Ship an
AppxMetadata\CodeIntegrity.catcoveringvk_swiftshader.dll, or drop/replace thevendor-signed binary. That is a build-packaging change rather than a code change, and it should
be verifiable against the public repro above in under a minute.
Repro is deterministic here and I have logs for all 13 crashes — happy to run anything specific.
Independent corroboration: a Microsoft-signed
vk_swiftshader.dllloads where the Google-signed one is blocked, same browser, same policyThis is corroboration, not a new diagnosis. @aPipixia123456 already established the substance from the raw event fields —
RequestedPolicy = 8is the Microsoft signing level, so no vendor Authenticode certificate can satisfy it. That argument stands on its own and does not need an experiment. What follows is an empirical check of it from the other direction, plus a same-host control that removes a variable my own earlier comment could not.Earlier in this thread I reported that Edge's Microsoft-signed
vk_swiftshader.dllloads under an enforcing CIG while Chrome's Google-signed copy is blocked, and I had to concede the obvious objection: three different files from three different products, so the signer was never isolated from the build.This is a tighter version of that experiment. It holds the host, the CIG policy, the machine and the probe constant, and swaps the DLL. It does not hold the binary constant — the two files are different builds (5,457,560 vs 4,723,528 bytes), so signature is still not isolated from build. What it removes is the cross-product variable: one browser, one policy, one machine.
Method. Replace Chrome's own
vk_swiftshader.dllwith Edge's, run the same WebGPU probe (requestAdapter({forceFallbackAdapter:true})×20) in Chrome, restore, repeat. CodeIntegrity 3033 events attributed bySystem/Execution/@ProcessIDto that arm's own pids — never a bare count, since ordinary browsing generates ~15 chrome 3033 events a day on this machine. Windows 11 Pro 26200, Chrome 151.0.7922.169, Edge 151.0.4129.78.| Arm |
vk_swiftshader.dllin Chrome's directory | 3033 | swiftshader module in the GPU child ||---|---|---|---|
| A0 baseline | Chrome's own —
CN=Google LLC| 4 | not loaded || A1 test | Edge's —
CN=Microsoft Corporation| 0 | loaded || A2 restore-control | original restored, SHA-256 verified | 4 | not loaded |
Zero foreign events, zero suspect arms, Chrome version identical across all three, final restore hash-verified. This is one run per arm (n=1), and the underlying trigger is intermittent — so read the table as a single consistent observation, not as a measured rate.
The module column is the part that matters. A silent 3033 on its own would be ambiguous — Chrome might simply have rejected a foreign DLL before Code Integrity ever got involved, which would make A1 meaningless.
It didn't, and this was measured rather than inferred. In A1 the module was resolved to a specific process and that process interrogated directly:
So the Microsoft-signed binary was mapped into a GPU child with CIG actively enforcing. The load was permitted, not skipped. (Signers were also checked per arm in the same run —
Get-AuthenticodeSignaturereturnedValidwith the CNs shown in the table.)A2 reproducing A0 is what I would expect if nothing drifted in Chrome, the machine or CI policy between arms. With one run each it is a consistency check, not a control in any statistical sense.
What this does and does not establish
It does not prove the certificate alone is responsible. Edge 151.0.4129.78 and Chrome 151.0.7922.169 are different builds, so the two files differ in more than their signature. What it shows is narrower and still useful: a Microsoft-signed
vk_swiftshader.dllloads in a CIG-enforcing Chromium GPU child on a machine where a Google-signed one is refused. On this machine, at least, the refusal is not simply a fixed property of the SwiftShader ICD or of the WebGPU path — some binary of that name was permitted to load under the same enforcing mitigation.The settling experiment — the same Chromium revision signed both ways — cannot be built outside Microsoft.
What this means for the catalogue idea
I previously suggested shipping an
AppxMetadata\CodeIntegrity.catas the most direct remedy. I now think that is incomplete on its own, though I want to be careful not to overstate it.The 3033 events here carry
RequestedPolicy 8, which is the Microsoft signing level. My understanding is that a Store catalogue validates below that — I have not verified that myself and would welcome correction from anyone who has. What is reported rather than inferred: in the equivalent Codex case (openai/codex#34133) @vkwislacode describes a catalogue that is present and valid, with the load still refused.But there is a second variable I should not skip past: the GPU child here also has
AllowStoreSignedBinaries: OFF. CIG has a Store-signed-permitting variant, and Chromium is not using it. So the honest statement is not "no signing route exists" - it is that the Store-signing route is closed by how the mitigation is configured, not by signing being unobtainable. A catalogue combined withAllowStoreSignedBinariesenabled on the GPU child looks like it may be worth testing. I have no way to test it from outside Chromium, so I offer it as a direction rather than a recommendation.That leaves three candidate directions rather than two, and I have no way to test the first:
I would rather be corrected here than have effort spent down a path this evidence cannot actually rule in or out.
A negative result worth recording
Cloudflare's official Turnstile demo (
demo.turnstile.workers.dev) did not reproduce anything here: 6 reps, no flags, widget verifiably rendered 6/6, 0/6 produced any 3033. I can't say why from 6 null reps. The point worth recording is only this: a clean run against a demo page is not evidence that a mitigation works.Scripts and raw per-arm CSVs available if useful.
Reading back over the thread — corrections and credit
Several comments landed while I was running this, and two of them change what I would have claimed.
#87638 got to the auth-webview trigger before I did. My previous comment reported a crash from Claude's own Cloudflare challenge rather than the Browser pane, on 08-19. #87638 was filed on 08-18 with the same finding — the app's own
claude.aiauth webview, 3033/3010 with per-second correlation, on 1.32352.1 — and it already carrieshas repro. Credit there, not here.@aPipixia123456 argues the catalogue route is a dead end, and the argument is stronger than mine. Their point:
RequestedPolicy = 8is the Microsoft signing level, so neither re-signing nor anAppxMetadata\CodeIntegrity.catcan satisfy it, because a Store catalogue is a lower level. My section above hedges toward "the Store route is closed by how the mitigation is configured, sinceAllowStoreSignedBinariesis OFF" — those aren't contradictory, but they point different ways. If enabling that CIG variant is not something Chromium will do, their conclusion is the operative one and mine is a technicality. I'd defer to them unless someone can show the allow-store variant is actually reachable here.@imitakov83's mechanism explains a null result I couldn't account for. They found
--disable-features=Vulkanand--disable-software-rasterizercover Skia/ANGLE Vulkan and the WebGL software fallback but not the WebGPU fallback adapter, because Dawn loads SwiftShader on its own path — so a trigger that only probes WebGL never reaches it. That is almost certainly why the Cloudflare demo page above rendered a widget 6/6 times and produced nothing: an explicit-render demo widget doesn't take the WebGPU path. It also means their extended switch set, not the shorter ones, is the one worth recommending to users.@InfiniteBSOD's 13/13 correlation supersedes my 4/4. I hedged that four fatal occurrences don't establish that every 3033 is fatal. They have 13 crashes against 13 CI events on a separate machine, no 3033 without a crash and no crash without a 3033, across nine builds including an Electron bump to 42.9.2. That is the stronger version of the same claim, and their explanation for the missing crash dumps — the process is killed at DLL load time, so there is no exception to capture — accounts for a "no minidump" mystery that spans several issues in this cluster, and for why telemetry would show nothing.
Newer report that looks like this one: #87638 (
has repro, auth webview). I also checked #88138 (Ok→Modified, NeedsRemediationon first launch) — despite the identical end state its body contains novk_swiftshader, no 3033 and no101457950, and it carriesarea:cowork, so it looks like the Cowork/update route rather than this one. Worth keeping those two routes apart during triage.Independent corroboration, second machine, same signature — plus two data points this thread may not have yet.
Env: Claude Desktop 1.34493.1.0 MSIX (
Claude_1.34493.1.0_x64__pzs8sxrjxfjjc, SignatureKind=Developer), Windows 11 Pro 26200.9168, RTX 5080 Laptop + Intel iGPU. SAC off, machine UMCI off.Three identical kills in 2 days (2026-08-21 18:00:44, 08-22 21:45:04, 08-22 22:43:25), each: 3× CodeIntegrity 3010 on
AppxMetadata\CodeIntegrity.cat, status0xC000003A(STATUS_OBJECT_PATH_NOT_FOUND — the directory does not exist) → 3033 onapp\vk_swiftshader.dll(RequestedPolicy=8,ValidatedPolicy=1, status0xC0000428; 3089 shows the embedded Anthropic/DigiCert Authenticode is valid) → GPU exit101457950(0x060C201E) → package flipsModified, NeedsRemediation→ 5× AppModel-Runtime error0x3CFC(ERROR_NEEDS_REMEDIATION) denying GPU relaunch within ~450 ms of the 3033 → whole app dies. Triggers observed: a Cloudflare Turnstile challenge frame on claude.ai (WebGL) and browser-preview page loads. 12+ preview creations without a SwiftShader load ran clean — the load is the trigger, not the preview.Data point 1 — the shipped MSIX has no catalog at all. The app's own repair cache (
%LOCALAPPDATA%\ClaudeDesktopRepairCache\1.34493.1\Claude.msix, 247,405,438 bytes, SHA-256AD5EAD595FEC1977C0CCB1D7FAB3BE040773B716451431DBD6BAB457BA31A55C, signature valid) contains 2,819 zip entries and zeroAppxMetadata/*entries. It also contains a leftover[Content_Types].old— a re-pack footprint, consistent with a signing pipeline that bypassed SignTool's APPX catalog generation. Installed tree matches the MSIX byte-for-byte (SHA-256 identical for claude.exe, vk_swiftshader.dll, libEGL.dll, libGLESv2.dll, ffmpeg.dll, AppxBlockMap.xml, AppxManifest.xml) — no local tampering; the defect ships from the vendor. Deployment log confirms the package came fromhttps://downloads.claude.ai/releases/win32/x64/...on 2026-08-21.Data point 2 — repair is structurally cosmetic. Three distinct remediations (Remove+Add, RegisterByPackageFullName repair loop, Add from RepairCache — all "finished successfully") plus a reboot;
AppxMetadata\is still absent afterward withStatus=Ok, and the next SwiftShader load kills the app again. Nothing to restore: the catalog was never in the package.Corroborating the CIG analysis: live GPU child on this machine (
Get-ProcessMitigation):MicrosoftSignedOnly: ON,AllowStoreSignedBinaries: OFF— so a Developer-signed catalog alone may stop the AppX integrity kill (LdrAppxHandleIntegrityFailure/ NeedsRemediation) without clearing the 3033. Fix likely needs both: ship the catalog and tolerate the failed SwiftShader load (as unpackaged builds and Chrome do — same 3033 pair fires on Chrome here ~daily, 221×/218× in 17 days of CI log retention, always benign). Controls: OpenAI Codex MSIX on the same machine (Electron, Developer-signed) shipsAppxMetadata\CodeIntegrity.cat, zero 3010 events; Nahimic DLL blocks (88×, three apps) never fatal.Evidence gathered in a read-only forensics session with Claude Code; full command list available on request.
Confirming this on discrete NVIDIA hardware, on a newer app build, with one difference from the original report that I think widens the repro: the crash does not require a browser preview.
Environment
Claude_1.34493.1.0_x64__pzs8sxrjxfjjcCodeIntegrityPolicyEnforcementStatus = 2Same fingerprint, same exception code
CodeIntegrity/Operational, same second as the FATAL line:
AppxMetadata\does not exist at all in the installed package on this machine — the catalog is absent rather than unreadable, consistent with the original report.New data point 1: fires without any browser preview
The original report is preview-triggered and deterministic on preview. Here, most crashes correlate with Browser-pane use, but not all. Example — cold start with no browser interaction, crash 37 seconds later:
12 app-fatal GPU crashes in
%LOCALAPPDATA%\Claude\Logs\main.logsince 2026-08-21.New data point 2: CI block fires far more often than it kills
116 Event 3033 records naming
vk_swiftshader.dllon this machine, against 12 app-fatal crashes in the same window. So the rejection is survivable most of the time and only sometimes escalates to the five-failed-relaunch fatal path. Whatever distinguishes the fatal cases may be a useful narrowing signal.New data point 3:
--disable-gpumakes it worse, as predictedRunning
Claude.exe --disable-gpu --disable-gpu-compositingstill reachesGoodbye.— expected, since disabling hardware acceleration pushes Chromium harder onto SwiftShader, i.e. the blocked DLL. Matches the amplification noted in #89250.Recovery behaviour matches
RegisterandRegisterByPackageFullNamewithRepairAppRegistrationOptionboth report success and do not restore launchability. OnlyRemove-AppxPackage+ reinstall (which carriesForceApplicationShutdownOption) recovers. Once broken, the app launches and silently exits before showing a window — no error, no dialog, no Application Error event, no Crashpad dump. 12 reinstalls in ~36 hours.Ruled out locally
Riot Vanguard (uninstalled,
vgkgone), per-app GPU preference (tested against both adapters — byte-identical exit code either way), Defender ASR rules (none configured), Controlled Folder Access (off), IFEO entries for Claude (none), process mitigation policy (DisallowChildProcessCreationNOTSET,BlockDynamicCodeNOTSET),AppInit_DLLs(empty), disk space (162 GB free), memory pressure (~1.5 GB tree RSS, 16 GB free).Possibly related
nvspcap64.dll(NVIDIA overlay capture hook) is also Event 3033 blocked inclaude.exeon this machine, non-fatally. Probably unrelated to the fatal path, but noting it since this is NVIDIA hardware and the original report was Intel — if the overlay hook is a second CIG-rejected injection into the same process, it may be worth a look.Happy to provide full
main.log, CodeIntegrity event export, or a GPU-child dump privately.Confirming this on a different GPU vendor and a much newer build — the diagnosis in the opening
post holds unchanged.
Environment: Windows 11 26100, Claude Desktop 1.37937.1.0 MSIX (yours was 1.24012.9.0, so
this survived ~13 releases), AMD Radeon RX 7700 XT, driver 32.0.31041.1004 (yours was Intel —
so it is not vendor-specific). Three crashes in three hours, all second-exact on CodeIntegrity 3033
for
app\vk_swiftshader.dll.AppxMetadata\does not exist in the installed package here either —only
AppxSignature.p7x,AppxBlockMap.xml,AppxManifest.xml.Three things I did not see in the thread that may save others time:
1. There is a Windows event that names the culprit directly — but it is ETW-only.
Microsoft-Windows-AppModel-RuntimeId=8, fired 271 ms before the first 0x3CFC:Get-WinEvent -LogName Microsoft-Windows-AppModel-Runtime/Admin | Where Id -eq 8returns zero —it is never persisted. Two weeks of post-hoc log analysis here missed it entirely. It only appears
in a live ETW session, which is much cheaper than ProcDump for anyone reproducing this:
2. Negative result — the Exploit Protection override does NOT work. Worth recording so others
do not lose an evening on it:
It writes the IFEO policy correctly (stored policy then reads
MicrosoftSignedOnly : OFF), butafter a full application restart the newly created GPU process still measures
MicrosoftSignedOnly = ON. Chromium applies the mitigation from inside the child at runtime, so anIFEO override cannot lift it. (Note the parameter is
MicrosoftSignedOnlyon this build —BlockNonMicrosoftBinariesis rejected by the cmdlet's ValidateSet.)3. Nothing is actually modified, which is why Repair cannot work. At the instant Windows reports
Modified, NeedsRemediation, verifying every file against the package's ownAppxBlockMap.xmlgives 3054 files, 0 problems; ACLs match baseline;
Get-AuthenticodeSignatureon the DLL isValid, signerCN="Anthropic, PBC". Repair flips the status back toOkby rewriting every file(all 3056 mtimes change), so it is cosmetic — the next WebGPU adapter request brings it straight
back.
Also matching #58009 on this machine: the "Claude in Chrome" extension cannot connect at all under
MSIX (
[Chrome Extension MCP] Failed to copy native host binary: EBUSY ... chrome-native-host.exe),which removes the obvious "just drive an external browser instead" workaround for packaged installs.
Additional reproduction on Claude Desktop 1.40609.0.0 (Windows MSIX, x64). This appears to match the failure mode reported here, including the runtime mitigation state.
Reproduced twice on 2026-08-31
Two separate crashes in the same day produced the identical GPU-process signature:
For the second occurrence, the app log shows a Browser preview was created five seconds earlier:
Code Integrity events at the exact crash second
Microsoft-Windows-CodeIntegrity/Operationalat 2026-08-31 14:24:10:The packaged
vk_swiftshader.dllitself has a valid embedded Authenticode signature:AppxMetadata\CodeIntegrity.catis absent in this installed package:Runtime GPU-child mitigation
While Claude was running normally, before opening Browser Preview, I identified the live
claude.exe --type=gpu-processchild and queried it directly withGet-ProcessMitigation.Observed:
So the runtime mitigation state also matches the condition described in this issue.
Downstream lifecycle behavior observed after the second crash
At 14:24:11, one second after the GPU crash:
CoworkVMServiceloggedPersistent RPC: connection ended: failed to read length: EOF.Shortly after:
On an earlier same-signature crash at 13:30, Cowork subsequently received a stop request and shut down cleanly. On the 14:24 occurrence, no corresponding Cowork stop request was observed, so the downstream cleanup path appears to have diverged even though the upstream GPU crash signature was the same.
I am not claiming the Cowork cleanup divergence or the
Modifiedtransition mechanism is explained by the GPU/CIG finding; I am reporting those as downstream observations only.Current assessment
Confirmed on this machine:
vk_swiftshader.dllAppxMetadata\CodeIntegrity.cat101457950MicrosoftSignedOnly=ON,AllowStoreSignedBinaries=OFFThe second occurrence additionally propagated into AppX/Cowork cleanup failure and
Modified, NeedsRemediationpackage state.I can provide the timestamped log excerpts and Windows event details if useful.
Two mechanism details this thread does not appear to cover yet — searched the OP and all 28 comments, and
gpu-recovery,Sentry, andstreakreturn zero. Neither is about the crash itself; both are about why it stays invisible. Confirmed on 1.40609.0.0, four crashes between 2026-08-30 and 2026-09-01.1. The built-in auto-recovery cannot fire for this crash pattern
The app already ships a guard that disables hardware acceleration after repeated GPU deaths, along with a user-facing notice localized into twelve languages ("Claude crashed because of repeated graphics problems in the previous session, so hardware acceleration has been turned off."). It did not trigger once across four crashes.
From the bundled main-process code, the startup marker requires at least 3 GPU deaths, and the streak counter resets when deaths are more than 5 minutes apart (
3e5ms):The crashes here were hours to days apart — 08-30 17:11, 08-30 21:40, 08-31 22:35, 09-01 00:22 — so the counter never accumulated past one and the marker was discarded at every launch. The detector assumes a rapid crash loop; this failure is a slow drip, which is exactly the shape most of this thread describes.
Persisting the death count across sessions, or widening the window substantially, would let the existing safety net actually engage. (With the caveat in section 3 that the mitigation it engages does not fix this crash.)
2. Crash telemetry reports the fact but not the cause
Each of the four crashes produced a Sentry event roughly one second into the following launch — 4 for 4, with zero events across the other ~12 launches in the same log, so the correlation is clean. The payload:
No type, no message, no stack. Aggregate telemetry can therefore show these crashes occurring at whatever rate they occur, while carrying nothing that points at Code Integrity,
vk_swiftshader.dll, or a signing-level mismatch. That may explain part of any gap between how often this is hit in the wild and how it ranks internally — the automated signal records that something died, and nothing about why.3. Disabling hardware acceleration does not mitigate this
Consistent with #89250. Tested on 1.40609.0.0 with
isHardwareAccelerationDisabled: truegenuinely applied — note the in-app toggle silently fails to write it, which I have filed separately as #91147, so this required patchingconfig.jsonexternally with the app closed.With the setting active and verified (GPU process on
--use-angle=d3d11-warp-webgl, WebGL reportingMicrosoft Basic Render Driver),navigator.gpuremains exposed,requestAdapter()still reaches the blocked SwiftShader path, and the app still terminated. Crash #4 in the list above was this configuration.One detail for anyone instrumenting this:
requestAdapter()resolves tonullabout a second before the process dies. It resolves precisely because the SwiftShader load was blocked, so any check that looks only at the resolved value will record this as a successful graceful fallback rather than an imminent crash.Confirming your analysis on a newer build and a different GPU vendor — plus one data point I have not seen reported on this issue or the related threads: Repair does not restore the catalog.
Environment
| Item | Value |
| --- | --- |
| Claude Desktop | 1.40609.0.0 (MSIX,
Claude_1.40609.0.0_x64__pzs8sxrjxfjjc) || Claude Code | 2.1.247 |
| OS | Windows 11 Pro, build 10.0.26200 |
| GPUs | AMD Radeon(TM) Graphics (iGPU) 32.0.21045.5002 + NVIDIA GeForce RTX 5090 32.0.16.1088 |
| Free RAM at crash | ~55 GB of 63 GB |
Same signature as yours. The Browser pane opened an external Cloudflare-protected page, the GPU process died about 4 s later with
exitCode: 101457950(0x060C201E), and the app terminated.Microsoft-Windows-CodeIntegrity/Operationalin the same second: 3010 ×3 againstAppxMetadata\CodeIntegrity.catwithStatus 0xC000003A, and 3033 namingapp\vk_swiftshader.dll. No BSOD, no Event ID 41, no 1001 — purely app-level, as you found.So this is not limited to the 1.24012.x builds or to Intel Arc: it reproduces on a build eleven versions later, on an AMD iGPU + NVIDIA discrete pair.
The new part: Repair is not a fix
A Settings → Apps → Claude → Advanced options → Repair does re-download the .msix, re-register the package and restore launchability. It does not restore the catalog. After a successful Repair on 1.40609.0:
The next Browser-pane page that touches WebGL crashes the app again.
This follows directly from your finding that the catalog is missing inside the downloaded MSIX: Repair re-downloads the same defective package, so there is nothing for it to restore. It also matches @HBCreAtiveD's report on #80444 that a full reinstall from
downloads.claude.aidoes not createAppxMetadataeither, as long as the reinstall stays on the MSIX channel.Practical consequence: the "just run Repair" workaround circulating on #80444 and the other threads recovers the package from
appxState=2, but it does not stop the crash recurring. Only your non-MSIX (--exe) workaround actually removes the failure path.One addition to the fix list
Worth stating explicitly alongside the asks you already have: Repair should restore the catalog once it ships. Otherwise anyone who hits this stays broken through every Repair cycle, and the failure stays invisible to
Get-AppxPackage, which reportsStatus: Okthe whole time.Consolidation
I have posted on #80444 suggesting this issue be treated as the canonical one for the root cause. The forensics here — live
Get-ProcessMitigationon the GPU child, the catalog missing inside the MSIX, the ProcDump/WinDbgntdll!LdrAppxHandleIntegrityFailurebucket, and the Chrome control group — are ahead of anything on that thread, but the same defect is currently spread across #80444, #80468, #81159, #81698, #81836, #82967 and #83478, which makes the true scale of it hard to see.Correction to my earlier comment, section 3.
I cited the GPU process running
--use-gl=angle --use-angle=d3d11-warp-webgl, and WebGL reportingANGLE (Microsoft, Microsoft Basic Render Driver ... D3D11), as evidence thatisHardwareAccelerationDisabled: truehad taken effect. That inference was wrong. I never captured a before-state, and there had already been a GPU crash ~4 minutes before I observed those flags — so Chromium had almost certainly fallen back to software rendering on its own, which it does after GPU process crashes.Two observations since:
config.json(verified in both the%APPDATA%path and the MSIX-redirectedLocalCachecopy), following an unrelated crash earlier today. So those flags do not indicate the app setting at all.d3d11-warpappears zero times in the application bundle, so the app is not passing it. Chromium is selecting WARP itself.What the correction does not change:
"isHardwareAccelerationDisabled": truegenuinely was present inconfig.jsonat the time of the crash I reported — that was verified directly by reading the file, in both paths, independent of the WARP flags. So the conclusion in section 3 stands: the setting does not mitigate this crash.If anything the finding is stronger than I framed it. Since Chromium had already fallen back to software rendering before that crash, the app died in a session that was already software-rendering, with the app-level setting also applied. Neither Chromium's own GPU-crash fallback nor the application setting prevents it —
navigator.gpustays exposed andrequestAdapter()still reaches the blocked SwiftShader load either way.Sections 1 and 2 of that comment (the
[gpu-recovery]threshold and reset window, and the empty Sentry payload) are unaffected — both were read directly from the bundled code and the app log rather than inferred. Re-verified today: still zerogpu-recoveryentries across the full log, with GPU deaths hours apart, so that guard has still never fired here.Apologies for the noise; better to correct a wrong mechanism in the thread than leave it standing.
Another confirmed reproduction of exactly this mechanism, with a few extra data points (x64, NVIDIA, HVCI/CIG, and the crash reproduces with hardware acceleration disabled).
Environment
Claude_1.40609.1.0_x64__pzs8sxrjxfjjc(app 1.40609.1, Claude Code 2.1.255), installed via Claude Setup.exe, StatusOkbetween crashesCrash (3/3 browser preview opens on 2026-09-02, previously 40+ preview opens in July on 1.22209.x with zero crashes)
main.logeach time:[Preview] Created browser previewthen 2-7 s laterRenderer log at the same second:
A valid external Instance reference no longer exists.(Dawn), and in two of three casesThe powerPreference option is currently ignored when calling requestAdapter() on Windowsimmediately before, i.e. WebGPU adapter discovery is the trigger. The whole app process tree dies in the same second (AppModel-Runtime event 217 "Destroyed Desktop AppX container" logged at the crash timestamp).Code Integrity correlation (Microsoft-Windows-CodeIntegrity/Operational), all three crashes, same second as the GPU exit:
vk_swiftshader.dll,vulkan-1.dll,libGLESv2.dll,dxcompiler.dll,ffmpeg.dllin the package are all Authenticode-signed by Anthropic, PBC. Brave on the same machine logs the identical 3033 for its ownvk_swiftshader.dll/vulkan-1.dllevery ten minutes and never dies, so the MSIX loader escalation is the differentiator, as described above.Hardware acceleration off does not help. With Help > Disable Hardware Acceleration (config
isHardwareAccelerationDisabled: true, GPU process running--use-gl=angle --use-angle=d3d11-warp-webgl), the very next browser preview crashed identically with the same 3033/3010 events. So this is not a driver issue and the in-app toggle is not a workaround for this bug.Post-crash state (matches #80444 / #84992): AppModel-Runtime status for the package sits at
0x2; every click on the tile runsRegisterByPackageFullNamewithForceTargetApplicationShutdownOption, RepairAppRegistrationOption(deployment log 603/649, "Trying to repair ACLs"), which reports success but leaves status0x2and the app still does not launch. Only a freshAddfrom the .msix (Claude Setup.exe) clears it to0x0. Reboots do not clear it.Notes for anyone working around it
Invoke-CommandInDesktopPackagehangs indefinitely on this machine (the process is created, cmdlet never returns)....\WindowsApps\Claude_<ver>\app\Claude.exedirectly from an unpackaged shell does get full package identity here (AppModel-Runtime 201[FinishPackageActivation]), so extra Chromium switches can be passed that way. I am testing--disable-features=WebGPUService --disable-blink-features=WebGPUto keep WebGPU/Dawn from ever probing the Vulkan/SwiftShader DLLs while keeping the Browser tool; will report back.--exeswitch ("forcing Squirrel install"), but that build blocks Cowork (#79307), so it is not a real option for Cowork users.Suggested fix remains as in the OP: ship the GPU-side DLLs at the required signing level / with a valid
AppxMetadata\CodeIntegrity.cat, or drop MicrosoftSignedOnly on the GPU child in the MSIX build, and make a GPU-process death non-fatal like Chrome.Confirming this on Windows 11 Home 25H2, build 26200.9168, Claude Desktop MSIX 1.40609.1.0.
Same signature: CodeIntegrity 3033 blocking app\vk_swiftshader.dll from
claude.exe, 3010 x3 on AppxMetadata\CodeIntegrity.cat (0xC000003A), package
then flagged Modified, NeedsRemediation.
Trigger: Claude Code session doing repeated site reviews (SEO work against a
site I own). Crashed multiple times in one afternoon, each time requiring a
full remove and reinstall. Not Cowork, two Code projects open.
Additional data points:
first fails outright, then after the processes exit it reports success
(AppXDeploymentServer 400 + 613, "finished successfully", ACLs repaired)
but the Modified bit never clears. Only Remove-AppxPackage +
-PreserveApplicationData then reinstall recovers it.
VerifiedAndReputablePolicyState 1 -> 0, confirmed, rebooted). The crash
recurred identically with SAC off. Consistent with CIG being the enforcing
mechanism, but worth stating since the "Learn more about Smart App Control"
link in the shell's error dialog sends people down that path. I gave up a
security feature chasing it.
button, so the suggested fix cannot be reached from the dialog itself.
WindowsApps\Deleted, failing to delete on a loop with error 0x12C. If a
degraded Intel graphics driver is pushing Chromium onto the SwiftShader
fallback, that would explain why some machines hit this constantly and
others never do.
Environment: Surface Pro 9, Intel graphics.
A second trigger for the same signing gate: an externally-injected DLL (Windows Auto Super Resolution), with the identical
RequestedPolicy/StatusfieldsReporting a variant on a Copilot+ ARM64 device. I'll separate what I measured from what I'm inferring.
The rejected module is not
vk_swiftshader.dll. It isSuperResExt.dllfrom the Microsoft packageMicrosoft.AutoSuperResolution_1.0.1.0_arm64__8wekyb3d8bbwe, which Windows Auto Super Resolution injects into the GPU child. The crash happens at GPU-process init / launch — no window is ever drawn — not on a WebGPU/Vulkan browser-preview probe.vk_swiftshader.dll(5.0.0) is present in my Claude package but was never rejected, and I see no Event 3010.The signing gate is identical to the one decoded in this thread. Event 3033 raw fields for my own
claude.exe, six occurrences, all identical:| Time | Process | File | RequestedPolicy | ValidatedPolicy | Status |
|---|---|---|---|---|---|
| 13:50:38–13:50:39 ×6 |
claude.exe|SuperResExt.dll| 8 | 1 | 0xC0000428 |RequestedPolicy 8=SE_SIGNING_LEVEL_MICROSOFT,Status 0xC0000428=STATUS_INVALID_IMAGE_HASH. Six rejections, six GPU-process crashes inmain.log, thenFATAL: GPU process isn't usable. Goodbye.withexit_code=101457950/0x060C201E.Same-machine MSIX-vs-non-MSIX control, same DLL, same policy fields, same 24 hours:
| Process | 3033 rejections | Packaging | Outcome |
|---|---|---|---|
|
msedgewebview2.exe| 292 | non-MSIX | survives, no crashes ||
claude.exe| 6 | MSIX | dies, 6 crashes |292→0 versus 6→6 — the same shape as the Chrome control already in this thread.
Deterministic three-state A/B (Claude Desktop 1.52386.3.0 arm64 MSIX, Electron 44.2.0 / Chromium 152.0.7977.76; ASUS UX3407QA, Snapdragon X X1-26-100, Adreno X1-45 driver 31.0.152.1, Windows 11 26200 ARM64, HVCI + Secure Launch active):
| ASR state |
claude.exe3033 | Result ||---|---|---|
| Package registered (Windows default) | 36 over 2 days | dies at launch |
| Toggled Off in Settings > Display > Graphics, rebooted | 12 | still dies — the Settings toggle does not stop injection |
| Package removed, rebooted | 0 | launches normally, 9-process tree, GPU sandbox enabled |
Re-registering ASR restores the failure. Proton Pass 1.40.0.0 (x64 MSIX, different vendor and Electron version) fails and recovers identically. VS Code (arm64, non-MSIX) is unaffected throughout.
Flag bisect (packaged exe launched directly from WindowsApps): no flags → crash;
--use-angle=d3d11-warp→ crash (WARP is Microsoft's CPU rasteriser and never touches the Adreno path, so this rules out the GPU driver and the D3D11 rendering path);--in-process-gpu→ works;--disable-gpu-sandbox→ works, hardware acceleration intact.---
A data point for the
CodeIntegrity.catdiscussion above@aPipixia123456 argued that shipping the catalog would not help, since
RequestedPolicy=8is the Microsoft signing level and a Store catalog validates below it. The ASR package is an interesting counter-example, measured on this machine:Get-ChildItem <ASR package>\AppxMetadata
CodeIntegrity.cat 12548 bytes (present)
Get-AuthenticodeSignature on every DLL in that package:
SNPE.dll NotSigned
SnpeHtpV73Stub.dll NotSigned
SuperResExt.dll UnknownError CN=TestAzureEngBuildCodeSign
(subject = issuer, untrusted root)
So a shipping Microsoft Store package contains two unsigned DLLs and one test-signed DLL, and ships a catalog — and those load fine in that package's own context. That suggests catalogs do vouch for sub-Microsoft-level binaries within their own package boundary.
For contrast, on the same machine:
Test-Path <Claude package>\AppxMetadata\CodeIntegrity.cat -> False
Test-Path <ASR package>\AppxMetadata\CodeIntegrity.cat -> True
That independently confirms the missing-catalog reports here.
What I am not claiming: that a catalog would let
vk_swiftshader.dllpassRequestedPolicy=8inside the GPU child. That is the open question and I can't answer it. I'm only noting that the "a catalog can't vouch below the Microsoft level" premise doesn't match what ASR's package does inside its own context.What this variant does establish:
SuperResExt.dllis only loadable where its own package catalog is in scope. When ASR injects it into a foreign MSIX process, that catalog is out of scope, the DLL is evaluated on its embedded signature (a test cert chaining to an untrusted root), and it's refused — with the same policy fields as the bundled-DLL case. Because the module comes from an OS package rather than Claude's bundle, no app-side packaging or signing change can prevent this particular trigger.Filed the OS-side behaviour with Microsoft via Feedback Hub. Details and controls also at electron/electron#53859 and electron/electron#52700. Happy to share the full CodeIntegrity export or run further diagnostics on this hardware.
One risk none of the remediation steps discussed in this thread mention: if you're about to run a repair/reinstall loop to clear the
Modified, NeedsRemediationstate, back up~/.claudefirst.@strumienapp's data point above (Squirrel build shares~/.claudewith the MSIX build, no data loss) is reassuring for a build switch - but a straight MSIX repair/reinstall is a different operation, and it has a separate, confirmed failure mode: #62997 documents that a Claude Desktop reinstall can destroy Code chat history (transcripts + Recents) while regular Chat history, project files, and memory all survive intact. That issue is closed but the underlying reinstall behavior it describes hasn't changed as far as I can tell, and it isn't specific to this CIG/vk_swiftshader bug - it can happen on any reinstall. Given how many people on this thread are already several repair cycles deep (@lucasmiachon-blip's "three distinct remediations,"@MatusPohorenec's catalog-not-restored finding), that's a second, unrelated way to lose data while fixing the first problem.I wrote up the CIG root cause end-to-end (matches this issue's diagnosis) plus a small PowerShell script that checks a machine for this exact risk and backs up
~/.claudebefore you touch Remove-AppxPackage or run Repair: https://github.com/sifatahmedsrk52-cyber/claudeguard - the root-cause writeup and the manual fix (switch to the unpackaged/Squirrel build, same as confirmed working in this thread) are free in the README, the diagnose+backup tooling itself is a paid download now since people wanted more than just the writeup.