![Windows:如何在其他应用程序完成时启动它](https://linux22.com/image/1406656/Windows%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%AE%8C%E6%88%90%E6%97%B6%E5%90%AF%E5%8A%A8%E5%AE%83.png)
我想自动启动一个应用程序,当其他应用程序完成时总是如此。这可以实现吗?
我的具体情况是:用户连接到远程桌面,然后必须出现一些带有特定页面的 Iexplorer 窗口。
到目前为止,我找到了使用以下方法的解决方案start /wait
:
start /wait prog1.exe
start /wait prog2.exe
但这个解决方案还不够好,因为第一个程序必须始终通过 cmd 脚本打开。
我尝试使用任务计划程序执行此任务,但不幸的是,我找不到能够满足我需要的适当中断或活动。
感谢您的任何帮助。
答案1
您已完成 90% 的解决方案。如果连接方法是通过 RDP,则可以在用户登录时启动程序。将“启动”命令放入 .BAT/.CMD 文件中,然后通过 RDP 的“高级”选项卡将其作为用户登录的一部分调用。
答案2
如果 PowerShell 是一个选项,您可以使用任务计划程序在隐藏的 PowerShell 窗口中启动此脚本。
这将监视mstsc.exe
进程的启动,然后notepad.exe
在每个mstsc.exe
进程退出时打开。
# The action to be performed for every new process event.
$action = {
$target = $EventArgs.NewEvent.TargetInstance
if($target.Name -eq 'mstsc.exe') {
# Run action as a job in order to handle multiple new calc.exe
# processes. Otherwise, the script will be blocked waiting for
# the first calc.exe to exit.
$jobScript = {
param($ProcessId)
(Get-Process -Id $ProcessID).WaitForExit()
notepad.exe
}
Start-Job -ScriptBlock $jobScript -ArgumentList $target.ProcessId
}
}
$query = @"
Select * From __InstanceCreationEvent within 3
Where TargetInstance ISA 'Win32_Process'
"@
Register-WMIEvent -query $query -Action $action -sourceIdentifier "New Process"