Как запустить пакетный файл в фоновом режиме при запуске определенной программы
Я хочу сделать так, чтобы когда пользователь запускал определенную программу, такую как Firefox, мой пакетный файл запускался в фоновом режиме.
Я использовал приведенный ниже код, но он запускает мой пакетный файл вместо Firefox. Я не хочу этого Я хочу, чтобы командный файл слушал программы на компьютере, и когда запускается определенная программа, командный файл запускается в фоновом режиме.
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\firefox.exe" /v Debugger /d "D:\Desktop\m.bat" /f
Как я могу сделать это?
1 ответ
Вы можете использовать этот скрипт PowerShell:
$query = New-Object System.Management.WqlEventQuery ("__InstanceCreationEvent", (New-Object TimeSpan (0, 0, 1)), 'TargetInstance isa "Win32_Process"')
$watcher = New-Object System.Management.ManagementEventWatcher
$watcher.Query = $query
$watcher.Options.Timeout = [System.Management.ManagementOptions]::InfiniteTimeout
$curProc = $null
While ($true) {
$e = $watcher.WaitForNextEvent().TargetInstance
If ($e.Name -eq 'firefox.exe' -and ($curProc -eq $null -or $curProc.ExitTime -ne $null)) {
$curProc = Start-Process 'cmd' -Argument '/c C:\path\to\script.bat' -PassThru -WindowStyle Hidden
}
}
Он использует WMI для наблюдения за созданием новых процессов, и если процесс принадлежит firefox.exe
, он запускает скрытую командную строку (если только она не запущена с предыдущего запуска Firefox).
Если вы хотите, чтобы новый запуск командного файла запускался при каждом запуске Firefox, используйте этот более простой скрипт:
$query = New-Object System.Management.WqlEventQuery ("__InstanceCreationEvent", (New-Object TimeSpan (0, 0, 1)), 'TargetInstance isa "Win32_Process"')
$watcher = New-Object System.Management.ManagementEventWatcher
$watcher.Query = $query
$watcher.Options.Timeout = [System.Management.ManagementOptions]::InfiniteTimeout
While ($true) {
$e = $watcher.WaitForNextEvent().TargetInstance
If ($e.Name -eq 'firefox.exe' ) {
Start-Process 'cmd' -Argument '/c C:\path\to\script.bat' -WindowStyle Hidden
}
}
Если вы не хотите, чтобы окно подсказки было полностью скрыто, просто измените -WindowStyle Hidden
в -WindowStyle Minimized
,
Сохраните выбранный сценарий PowerShell как .ps1
файл. Чтобы запустить его при входе в систему, поместите пакетный файл, содержащий это, в папку автозагрузки:
powershell -file 'C:\path\to\powershellScript.ps1' -executionpolicy bypass -windowstyle Hidden