Windows 11 Monthly Cumulative Update Fails to Install in Offline Mode: Copy To Cache: Failed. HRESULT: -2145095681 or HRESULT: -2146467818

We have received some reports that using BatchPatch offline mode to install the most recent monthly cumulative update for Windows 11 is now failing with the following errors appearing in the Remote Agent Log column in the grid (this log can also be accessed by using Actions > Windows updates > View BatchPatch.log or by opening the BatchPatch.log file directly on the target computer in the remote working directory, which is defined in BatchPatch Tools > Settings > Remote Execution > Remote working directory). The default location is C:\Program Files\BatchPatch\BatchPatch.log

The error that appears in the log is:
Copy To Cache: Failed. HRESULT: -2145095681
We have also observed this other error, though much less frequently:
Copy To Cache: Failed. HRESULT: -2146467818

We are experiencing the problem on our systems too. Microsoft has (once again) made changes to the way that Windows Update functions, which is now causing this feature in BatchPatch to not work. We are currently investigating how we might address this in a future version of BatchPatch. However, in the meantime I will illustrate below how to effectively work around this issue.


Identifying the Issue:

The relevant line in the Remote Agent Log for the target system is:

skipped> 2025-03 Cumulative Update for Windows 11 Version 24H2 for x64-based Systems (KB5053598) - Reason: Update not downloaded/cached

And here is a screenshot of the Remote Agent Log column in my BatchPatch instance where I’m seeing this error right now. Notice that in the section that starts with Begin copying files to Windows Update cache, the first update (2025-03 Cumulative Update for Windows 11 Version 24H2 for x64-based Systems (KB5053598)) contains 16 files. Each file’s line in the log shows Copy To Cache: Failed. HRESULT: -2145095681 at the end:



We can see that the KB5053598 2025-03 Cumulative Update was skipped (because it wasn’t able to be cached even though the update files were successfully downloaded). The other two updates (KB5049622, KB890830) still installed successfully. To install the skipped cumulative update, I’ll first examine the list of files that the update contains. If we look at the list of files that the 2025-03 cumulative update contains, we can see there are two files with .MSU extension.

5> windows11.0-kb5043080-x64_953449672073f8fb99badb4cc6d5d7849b9c83e8.msu :: Copy To Cache: Failed. HRESULT: -2145095681
13> windows11.0-kb5053598-x64_6cb3ffc5c4d652793dc71705248426eecdacdfd0.msu :: Copy To Cache: Failed. HRESULT: -2145095681

We can deploy these files directly to the target computer(s) using the BatchPatch Deploy feature. The 2025-03 Cumulative Update is KB5053598, so I’m actually going to start with the other KB5043080. In this case I’m pretty confident that KB5043080 isn’t applicable to the computer, but I want to see what happens when I try to install it. It’s probably there as a prerequisite for machines that do not already have the update installed. Even though I expect KB5043080 won’t install due to not being applicable, I want to be thorough and make sure that I attempt to install any .MSU file that is contained in KB5053598. It will not always be sufficient to *only* install the KB5043080 (or whichever KB ID matches the current month’s cumulative update KB ID). If the cumulative update contains other child .MSU files in addition to the primary .MSU for the KB ID of the parent update, we should generally always attempt to install those other child updates first in order to be sure that any prerequisites are met before we attempt to install the .MSU for the KB ID of the parent update, which in this case is KB5053598 — the March 2025 monthly cumulative update.


Workaround: Deploying the .MSU Update Files Directly with BatchPatch

We are currently investigating how we might address this in a future version of BatchPatch. However, in the meantime I will illustrate below how to effectively work around this issue.:

During the offline cached mode Windows Update process, the cumulative update is downloaded to the BatchPatch local cache directory as a bundle of files. When this issue first cropped up, one of the key changes that Microsoft made was to begin delivering the .MSU version of the update file included in the bundle of files for the cumulative update. So now if you experience the error and failure that is described by the title of this article/posting during the offline cached mode installation process, you can still get the update deployed with the BatchPatch Deploy method, by directly deploying the .MSU file(s) from the BatchPatch local cache directory to your target computers. This process is explained below.

  1. With the desired target host selected/highlighted in the grid, I click on Actions > Deploy > Create/modify deployment.
  2. Next I click on the file browser button to select the .MSU file deploy. I browse to the BatchPatch cache directory on my BatchPatch computer (this location is defined under Tools > Settings > Windows Update > Local update cache directory), and then I select the .MSU file that I want to deploy. The first file I want to deploy (or attempt to deploy) is the KB5043080 .MSU file.
  3. In this case I’m going to choose the option for a singular .MSU deployment:
  4. I browse to location of the desired .MSU file, and choose it.
  5. I chose to select the /norestart option so that the installer does not reboot the target computer when it finishes installing the update.
  6. Finally I’ll click Execute now to begin the deployment process. This will tell BatchPatch to copy the file to the target computer and then initiate its installation.
  7. As I suspected, this update is not applicable to the system. I know this because the deployment completed with the All Messages log column showing Exit Code: -2145124329, which means Update Not Applicable. In the next version of BatchPatch we’ll make sure that Update Not Applicable is included in the log right next to the exit code so that there is no confusion. However, in the current version of BatchPatch you’ll only see the HRESULT exit code value.
  8. Now I’ll follow the exact same process to deploy the .MSU for KB5053598.
  9. When this one finishes, I see Deployment: Exit Code: 3010 (SUCCESS – REBOOT_REQUIRED)
  10. I can now initiate the reboot in BatchPatch. If I had NOT selected the /noreboot switch in the deployment configuration, the target computer would have rebooted itself immediately after completing the update installation. However, I prefer to have BatchPatch initiate and monitor the reboot, rather than the target computer rebooting itself.
Posted in Blog, General, Tutorials | Tagged , , , , | Comments closed

WSUS is Now Deprecated

Microsoft announced at the end of last year that WSUS is now officially deprecated.

Microsoft said:

As part of our vision for simplified Windows management from the cloud, Microsoft has announced deprecation of Windows Server Update Services (WSUS). Specifically, this means that we are no longer investing in new capabilities, nor are we accepting new feature requests for WSUS. However, we are preserving current functionality and will continue to publish updates through the WSUS channel. We will also support any content already published through the WSUS channel.

What does this announcement mean for you?

Realistically, it probably doesn’t mean a whole lot, at least not any time in the near term or medium term. The reality is that Microsoft has barely touched WSUS in the past 15+ years, and they currently have no plans to remove it or stop publishing updates to the WSUS channel, so you can continue to use your WSUS for the foreseeable future.

As for BatchPatch, it continues to work with or without WSUS.

Posted in Blog, General | Tagged | Comments closed

Wait for a Remote Process to Finish Running Before Installing Updates

BatchPatch has a lot of built-in options to facilitate customizing your Windows Update process or your process for updating a third-party application. Today I want to illustrate one way to use BatchPatch to proceed with an update installation only after it confirms that a remote process is no longer running.

Maybe your environment has some requirements that prevent you from starting a patch installation or update process on target computers until after a certain process is no longer running on those target computers. Imagine you have someProcess.exe that you want to ensure is not still running at the time that you launch a remote Windows Update installation on various target computers. Here is one way to do it:

  1. In BatchPatch you’ll need to create a job queue. Select the desired rows/hosts in the grid, and then click Actions > Job Queue > Create/modify job queue
  2. In the Job Queue window I’ve created a queue which will test the target computer for a specific running process (someProcess.exe). If that process is found to be running, the Job Queue jumps to the label STILL RUNNING, which effectively makes a loop. It waits 5 minutes and then performs the same check. The process will loop indefinitely, checking for the existence of that running process every 5 minutes. If/when the process is found to no longer be running on the target computer, only then will the job queue advance to the next step, which in this case is to Download and install updates + reboot always.
  3. In the Job Queue above you can see the steps are as follows:
    step 1: Label:STILL RUNNING
    step 2: Wait 5 minutes
    step 3: If specified process (someProcess.exe) is running, goto label:STILL RUNNING
    step 4: Label:PROCESS NO LONGER RUNNING
    step 5: Download and install updates + reboot always
  4. At this point we can either click Execute now to start the job queue on all of the currently selected hosts/rows in the grid, or if we want to save the grid for later use (or to be run as a scheduled task), we can give the queue a title and then add it to our saved queues by clicking the double-right-arrow button in the Job Queue window.
Posted in Blog, General, Tutorials | Tagged , | Comments closed

BatchPatch New Build Released March 2025

We published a new build recently. The change log is visible in the software under Help > Check for updates > View change log

Posted in Blog, General | Tagged , | Comments closed

BatchPatch New Build Released February 2025

We published a new build recently. It contains a security update as well as grid performance improvements. The change log is visible in the software under Help > Check for updates > View change log

Posted in Blog, General | Tagged , , | Comments closed

Reviewing Some of the Basic BatchPatch Functionality

I am regularly reminded that we have some users who have been using BatchPatch for months or even years but who haven’t even scratched the surface when it comes to functionality. Today I don’t even want to get into any of the more advanced features of BatchPatch. Instead I actually want to focus on just a few of the most basic operational elements that *ALL* BatchPatch users should know.

  1. After you run Actions > Windows updates > Check for available updates, you can review which updates are available for a given computer by middle-clicking the Remote Agent Log column for that row. Middle-click is the same as scroll-wheel click. You can also use Right-click > View cell contents. Similarly, you can view the contents of almost any cell in the grid with these same options. Also note, the window that appears that shows the cell contents can be moved around as needed by right-clicking or middle-clicking anywhere on that window and dragging it to the desired location on the screen.
  2. Another way to view the detail for a given row is to expand the contents of that entire row by double-clicking it. Alternatively use Right-click > Expand row(s), especially if you want to see the contents of multiple rows at one time.
  3. If you want to review the list of available updates for multiple computers all at the same time, you might prefer to use Actions > Windows updates > Generate consolidated report of available updates
  4. We have some users who like to save their grid every month so that when they start the following month they can just re-open the saved grid and continue working from there. While this is ok, there are some considerations to keep in mind. First, you might want to instead use templates. A template is just a .bps grid file that has been saved with a .bpt file extension instead of .bps. You can do this either by manually renaming a file or by using File > Generate template file (.bpt). Template files are useful to have a baseline starting point for each patching operation. Instead of opening last month’s .bps grid file and starting off where you left off before, if you instead setup your grid and save it as a .bpt template file, when you launch that template file and save it, it will force you to save it as a new file. The idea is that each month if you launch your template file, it starts you at your baseline rather than continuing off where last month left off. This way each month you can save your BatchPatch grid to a new .bps file, and each month’s history will be saved in a separate file. This also has the side benefit of preventing the BatchPatch grid file from growing excessively large. When you continue to use the same exact .bps file from month to month to month, it can grow very large because it contains a lot of data. At a certain point the very large amount of data that is contained in the grid can and will cause instability and general weirdness in the app. To alleviate this, either start fresh with a new grid (or launch a template), or delete data from your grid with Actions > Clear column contents.
Posted in Blog, General, Tutorials | Tagged | Comments closed

CLR error when launching BatchPatch


If you see something like this error below when you try to launch BatchPatch, especially on an older version of Windows, it means that you do not have the required version of .NET installed on that computer. BatchPatch currently requires .NET 4.6 to run. If your OS doesn’t have it installed, you’ll encounter an error similar to this, and BatchPatch will be unable to open/launch/run:

Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: BatchPatch.exe
Problem Signature 02: 2024.7.16.15
Problem Signature 03: 6696c8ff
Problem Signature 04: BatchPatch
Problem Signature 05: 2024.7.16.15
Problem Signature 06: 6696c8ff
Problem Signature 07: 0
Problem Signature 08: ffffffff
Problem Signature 09: System.MissingMethodException
OS Version: 6.3.9600.2.0.0.272.7

Posted in Blog, General | Comments closed

Remotely Download and Install Windows Updates on Multiple Computers

You can use BatchPatch to trigger the Windows Update process across an entire network of computers in just a couple of clicks.

  1. Highlight the rows in the grid for the target hosts that you would like to act upon.
  2. If you’d like to see which updates are available for your computers, start by clicking Actions > Windows updates > Check for available updates. Below is a screenshot that shows the result from a single computer, which I displayed by middle-clicking the Remote Agent Log field for that particular row/host. However, you can also create a consolidated report of available updates for many or all hosts in the grid by using Actions > Windows updates > Create consolidated report of available updates
  3. When you’re ready to execute the download and install process, click Actions > Windows updates > Download and install updates + reboot if required to initiate the process on all selected/highlighted rows in the grid
  4. BatchPatch will then begin the Windows Update download and install process on those hosts.

If you want to use BatchPatch for additional tasks, in addition to Windows Update, it’s very simple. You can schedule or manually execute many other types of actions in BatchPatch, and you can even stack them together so that a number of actions can be executed sequentially on target hosts (see the BatchPatch Job Queue). You can even orchestrate more complex sequences that involve numerous hosts with dependencies, such that actions are executed across only certain hosts at any given time, with the completion of one host or group of hosts being the trigger for the next host or group of hosts to begin processing (see the BatchPatch Advanced Multi-Row Sequence).

Posted in Blog, General, Tutorials | Comments closed

Windows Updates and Patch Management with BatchPatch

BatchPatch continues to be one of the most effective Windows Update tools in existence, while also being one of the most cost-effective applications when it comes to patch management, in general. The name, BatchPatch, was selected because the software enables an IT administrator to be able to manage patches and updates on many computers, simultaneously. Effectively speaking, you can download or apply or install a ‘Batch’ of ‘Patches’ to many target servers or workstations all at the same time, and typically in just a couple/few clicks of the mouse. In addition to on-demand control, you can also schedule any BatchPatch action to run on a schedule at a set time. Also, one of the best parts is that you can monitor the progress of your Windows Update downloads and installations all in real-time in the BatchPatch console.

BatchPatch Windows Patch Management Operations:

Everything in BatchPatch revolves around the BatchPatch grid. Add a list of target computers or import a list directly from Active Directory. You can even synchronize a grid with an Active Directory organizational unit (OU) or security group. Once your grid is populated with hosts, you’ll select the desired targets for a given action, and then you’ll click on the action that you want to execute (or schedule it to run at a specific datetime).

Downloading and Installing Windows Updates

To check for available Windows Updates on numerous target hosts, just select the rows in the grid that contain the desired targets and then click on Actions > Windows updates > Check for available updates

Deploying Third-Party Software

Select the desired target machines in the grid, and then click on Actions > Deploy > Create/modify deployment. Select the desired options for your particular deployment, and then click Execute Now. Virtually any 3rd-party application can be deployed using BatchPatch.

Executing Custom Scripts And Commands

You can use BatchPatch to execute your own scripts or commands by selecting the desired target computers in the grid, and then click on Actions > Execute remote process/command > Create/modify

So Much More…

BatchPatch contains a lot more functionality than what’s explained above. Some of the other features that enable you to maximize your Windows patch management, Windows updates, software deployment, and script execution needs are:

  • Offline update mechanism for machines with no internet access or WSUS access
  • Built-in and user-definable functions to retrieve information from target computers, including but not limited to things like checking last bootup time, OS version, disk space, RAM usage, installed programs, registry keys/values, MAC address, and file or process or service existence
  • Job Queue to run a series of actions on target computers
  • Sequences to orchestrate complex patching and script execution on multiple computers with dependencies, such that you can control which computers execute at which times, enabling you to sequence computers with dependencies. You can customize so that, for example, you could run a script on one computer, then patch several computers, then reboot computers in a particular order, then run another script on several computers, then install Windows updates and reboot several other computers, and so. If you have a group of 20 computers with very specific dependencies or uptime requirements, BatchPatch sequences can be an extremely powerful automation tool to enable one-click processing of numerous computers, with those computers only being patched or rebooted in the exact order that you determine
  • Wake on LAN computers
  • Reboot or Shutdown computers
  • Copy files or folders
  • And still much more!
Posted in Blog, General, Tutorials | Tagged , | Comments closed

BatchPatch New Version Released 20240716

Just a reminder… we don’t post about every new build/version on this blog. You can see the full change log and version history inside of the software under Help > Check for updates > View change log

On July 16, 2024 we released a new version of BatchPatch (v20240716):

  • BatchPatch Offline Mode now supports Windows 11 and Windows Server 2022. This also includes options for Windows 11 and Windows Server 2022 under Tools > Download offline updates Repository.
  • Fixed an issue where BatchPatch Offline Mode would fail/error when trying to download/install the monthly cumulative update with Copy To Cache: Failed. HRESULT: -2147024894
  • The user-defined.xml file can now be optionally encrypted on disk (Tools > Settings > General > Encrypt user-defined.xml on disk).

    This file is saved in your user profile on the BatchPatch computer. It contains your saved commands, deployments, job queues, etc. The default location is:

    C:\Users\USERNAME\AppData\Local\Cocobolo_Software,_LLC\BatchPatch\user_defined\user_defined.xml

  • Miscellanous bug fixes and various minor changes/improvements
Posted in Blog, General | Tagged , | Comments closed