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
- Error 1053: The service did not respond to the start or control requestA service has about 30 seconds to report back to the service control manager, and the process…
- PowerShell: WARNING: Unable to resolve package sourceWindows PowerShell 5.1 runs on .NET Framework, which on older or unpatched systems still…
- Python was not found; run without arguments to install from the Microsoft StoreWindows ships app execution aliases for python.exe and python3.exe that open the Store, and…
- The trust relationship between this workstation and the primary domain failedThe machine account password the workstation holds no longer matches the one in Active…
- 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: A required privilege is not held by the client (0x80070522)Creating a symbolic link needs SeCreateSymbolicLinkPrivilege, which standard accounts do not…
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.