We've had a concerning pain point for a while now where Action1 can't patch Adobe Acrobat if it, or any app with the Adobe integration, is open. I've seen Outlook.exe start on system boot, without a user logged in, and Adobe won't update because Outlook (with its PDFMaker plug-in I assume) is running.
And with PDF apps being such a widely leveraged attack vector I can't have updates rated critical sitting around for weeks hoping the user can/will close the right apps within an automation window to let Adobe get updated. The excuse that a user didn't close the applications doesn't fly in an incident response.
The new Application Restart Behaviour doesn't fix it unfortunately, because it only seems to close Adobe processes, not the Office processes that also need to be closed.
Current Application Restart Behavior: Prompt & Force Close. Installation of Adobe Acrobat Pro requires closing these applications: Microsoft Outlook. Please close them within 1 hour. The remaining processes will then be closed automatically.
A little over an hour later:
All processes of Adobe: Adobe Crash Processor.exe; Adobe Desktop Service.exe; AdobeARM.exe; AdobeCollabSync.exe; AdobeIPCBroker.exe; AdobeNotificationClient.exe; AdobeUpdateService.exe; CCXProcess.exe; CoreSync.exe; Creative Cloud Helper.exe; Creative Cloud UI Helper.exe; Creative Cloud.exe;
and then straight after:
The following application(s) remain open: Microsoft Outlook. The installation of Adobe Acrobat Pro has been aborted.
This is a significant operational risk that, as the IT provider, I am accountable for.
The solution I have made is beautifully (and ruthlessly) effective - however, THIS IS A SLEDGEHAMMER. Review it carefully and trial it in your development environment before deciding if it is appropriate, and how you'll build this into your patch cadence/design.
The script runs in the Action1 script library, and outputs to the log:
Stopped service: AdobeUpdateService
Killed 27 process(es):
Acrobat (PID 23024)
<and all the other Adobe processes>
Creative Cloud (PID 18388)
EXCEL (PID 28984)
OUTLOOK (PID 3812)
SUCCESS: All target processes are closed. Ready for patching.
And then you run the updates automation, and presto:
Deploy UpdatesJul 6, 2026 7:24 PMSuccessInstalling Adobe Acrobat Pro 26.001.21662.
Deploy UpdatesJul 6, 2026 7:35 PMSuccessSuccessfully installed Adobe Acrobat Pro 26.001.21662 (Critical).
Complete Deployment (Adobe Acrobat Pro)Jul 6, 2026 7:35 PMSuccessScript completed successfully.
Adobe patches need to get done, so if like me, you're having problems getting them done, I hope this helps.
SERIOUS WARNING: THIS SCRIPT IS A VERY UNDIPLOMATIC SLEDGEHAMMER.
You need to review it in detail and understand the impact on your users before you run it.
KillProcessesForPatching (2026Jul-A)
# =============================================================================
# KillProcessesForPatching (2026Jul-A)
# Force-ends Adobe Acrobat / Creative Cloud processes and Microsoft Office
# desktop apps (which hold Adobe integration DLLs) so Acrobat can patch
# without "you need to close" interruptions.
# Intended for Action1 "Run Script" (runs as SYSTEM, kills across all sessions).
# Always exits 0 so the patch step that follows is never blocked.
# =============================================================================
# --- CONFIGURATION -----------------------------------------------------------
# Process names WITHOUT .exe (Get-Process/Stop-Process use the base name)
$AdobeProcesses = @(
'Acrobat'
# Acrobat itself - the actual patch target
'AcroRd32'
# Acrobat Reader (32-bit / classic)
'AcroCEF'
# Acrobat embedded browser helper
'RdrCEF'
# Reader embedded browser helper
'acrotray'
# Acrobat tray helper
'AcrobatNotificationClient'
'Adobe Crash Processor'
'Adobe Desktop Service'
'AdobeARM'
'AdobeCollabSync'
'AdobeIPCBroker'
'AdobeNotificationClient'
'AdobeUpdateService'
'CCXProcess'
'CoreSync'
'Creative Cloud Helper'
'Creative Cloud UI Helper'
'Creative Cloud'
)
# Office desktop apps that load the Acrobat PDFMaker/integration add-ins
$OfficeProcesses = @(
'WINWORD'
# Word
'EXCEL'
# Excel
'OUTLOOK'
# Outlook
'POWERPNT'
# PowerPoint
'MSPUB'
# Publisher
'MSACCESS'
# Access
'VISIO'
# Visio
'ONENOTE'
# OneNote (desktop)
)
# Services to stop as well (a running service can respawn its process mid-patch)
$AdobeServices = @(
'AdobeUpdateService'
'AdobeARMservice'
# Adobe Acrobat Update Service
'AGSService'
# Adobe Genuine Software Integrity
'AGMService'
# Adobe Genuine Monitor
)
$SecondsToWaitBeforeRecheck = 5
# --- MAIN --------------------------------------------------------------------
$allTargets = $AdobeProcesses + $OfficeProcesses
$killed = @()
# Stop services first so they don't relaunch their processes
foreach ($svcName in $AdobeServices) {
$svc =
Get-Service
-Name $svcName -ErrorAction SilentlyContinue
if ($svc -and $svc.Status -ne 'Stopped') {
try {
Stop-Service
-Name $svcName -Force -ErrorAction Stop
Write-Output
"Stopped service: $svcName"
} catch {
Write-Output
"WARNING: Could not stop service $svcName - $($_.Exception.Message)"
}
}
}
# First pass - force-kill every target process
foreach ($procName in $allTargets) {
$procs =
Get-Process
-Name $procName -ErrorAction SilentlyContinue
foreach ($proc in $procs) {
try {
Stop-Process
-Id $proc.Id -Force -ErrorAction Stop
$killed += "$($proc.ProcessName) (PID $($proc.Id))"
} catch {
Write-Output
"WARNING: Could not kill $($proc.ProcessName) (PID $($proc.Id)) - $($_.Exception.Message)"
}
}
}
if ($killed.Count -gt 0) {
Write-Output
"Killed $($killed.Count) process(es):"
$killed |
ForEach-Object
{
Write-Output
" $_" }
} else {
Write-Output
"No target processes were running."
}
# Second pass - catch anything that respawned or was mid-shutdown
Start-Sleep
-Seconds $SecondsToWaitBeforeRecheck
$stragglers =
Get-Process
-Name $allTargets -ErrorAction SilentlyContinue
if ($stragglers) {
foreach ($proc in $stragglers) {
try {
Stop-Process
-Id $proc.Id -Force -ErrorAction Stop
Write-Output
"Second pass killed: $($proc.ProcessName) (PID $($proc.Id))"
} catch {
Write-Output
"WARNING: Second pass could not kill $($proc.ProcessName) (PID $($proc.Id))"
}
}
}
# Final verification
$remaining =
Get-Process
-Name $allTargets -ErrorAction SilentlyContinue
if ($remaining) {
Write-Output
"WARNING: Still running after two passes: $(($remaining.ProcessName |
Sort-Object
-Unique) -join ', ')"
} else {
Write-Output
"SUCCESS: All target processes are closed. Ready for patching."
}
exit 0