Windows: The process cannot access the file because it is being used
Windows takes mandatory file locks, so a handle held anywhere blocks a delete or rename that would simply succeed on Linux. The holder is often not the obvious application: an antivirus scanner, the search indexer or an Explorer preview pane can keep a handle open long enough to break a build's clean step.
Quick fix
Read the commands before running them. Anything that restarts a service, deletes data or changes permissions should be tried on a non-production system first.
:: Find the process holding the handle
handle64.exe -a -u C:\build\app.dll :: Sysinternals Handle
openfiles /query /v :: files opened over a share
:: PowerShell: which process has the file loaded
Get-Process | Where-Object { $_.Modules.FileName -contains "C:\build\app.dll" }
:: Exclude build directories from real time scanning
Add-MpPreference -ExclusionPath "C:\build"
:: Stop the service or app pool before overwriting its binaries
Stop-Service MyService
Restart-WebAppPool DefaultAppPool
:: In build scripts, retry the delete briefly rather than failing the run
How to diagnose Windows errors
Windows errors surface as numeric codes that mean little on their own, but the operating system keeps detailed logs that almost always contain the real cause. Two categories dominate developer machines: missing Visual C++ redistributables (a DLL-not-found error for a runtime the application assumed was present) and architecture or dependency mismatches (the 0xc000007b family, usually a 32-bit/64-bit mix).
If the quick fix above does not resolve it, work through these steps. They apply to this whole class of error, not just to this one message, which is usually what saves the time.
- Read Event Viewer under Windows Logs → Application and System, filtered to the time of the failure. The numeric code in the dialog maps to a detailed entry there.
- For MSI failures, install with verbose logging:
msiexec /i package.msi /l*v install.log, then search the log for "Return value 3". The lines just above name the failing action. - For missing DLLs, install the matching Visual C++ Redistributable and confirm the architecture matches the application (x64 versus x86).
- Repair system corruption with
sfc /scannowfollowed byDISM /Online /Cleanup-Image /RestoreHealth, in that order. - For access-denied errors, check both NTFS permissions and whether the process needs elevation; UAC virtualisation can make writes appear to succeed while landing elsewhere.
Tools worth reaching for
Event Viewermsiexec /l*vsfc /scannowDISM /RestoreHealthProcess Monitor (ProcMon)
Authoritative references
Primary documentation for this error, worth reading before applying any fix in production.
Related Windows errors
- Windows Update: error 0x80070643A Windows Update (commonly a .NET or security update) failed to install, often due to a…
- Windows: 'x' is not recognized as an internal or external commandcmd searched PATH and found nothing by that name. An already open terminal keeps the…
- Windows: 0xc000007b application unable to start correctlyA 32/64-bit mismatch or corrupt/missing runtime DLLs prevented the application from starting…
- Windows: Access is denied (error 5)A process attempted an operation without sufficient privileges, or a file/service is locked…
- Windows: bind failed, the port is excluded by the Hyper-V dynamic port rangeHyper-V and WSL 2 reserve blocks of TCP ports at boot, and anything inside a reserved range…
- Windows: corrupted system files / component storeSystem instability or update failures caused by corruption in protected system files or the…
- Windows: RDP can't connect (CredSSP encryption oracle remediation)Remote Desktop fails after a CredSSP update mismatch: one side is patched and enforcing while…
- Windows: The specified path, file name, or both are too long (MAX_PATH)Many Windows APIs still enforce a 260-character path limit. Deep node_modules trees and…
Browse other categories
- HTTP 494xx client errors, 5xx server errors, redirects, headers and protocol problems.
- JavaScript 42npm resolution, async pitfalls, hydration, memory limits and runtime type…
- Database 41Connections, deadlocks, constraints, replication and memory limits.
- AI 35Rate limits, context windows, GPU memory and model-serving failures.
- Network 35Refused connections, timeouts, resets, MTU problems and port exhaustion.
- Python 35Imports, virtual environments, encoding, concurrency and dependency conflicts.
- Kubernetes 34CrashLoopBackOff, ImagePullBackOff, OOMKilled, RBAC, scheduling and storage.
- Docker 27Daemon connectivity, disk space, image pulls, ports and architecture mismatches.
- System 26Disk space, systemd units, file descriptors, OOM killer and scheduled jobs.
- Cloud 25IAM permissions, quotas, service limits and credential failures.
- Security 25JWT validation, CSRF, OAuth grants, SELinux, SSH host keys and CSP.
- TLS 24Untrusted authorities, expiry, hostname mismatch, chains and cipher negotiation.
Something missing or wrong?
This entry is maintained by hand. If the fix is out of date, incomplete, or you have a better one, email a correction and it will be reviewed.