Windows: Як запустити програму, коли інша закінчить


2

Я хотів би запустити програму автоматично, завжди, коли закінчується деяка інша програма. Чи можна навіть виконати?

Моя конкретна ситуація: користувач підключається до віддаленого робочого столу, а потім, деяке вікно Iexplorer з певною сторінкою має відбуватися.

До цих пір я знайшов рішення, використовуючи start /wait:

start /wait prog1.exe
start /wait prog2.exe

але це рішення не є достатньо гарним, оскільки перша програма повинна бути завжди відкрита через cmd-скрипт.

Я спробував виконати це завдання за допомогою планувальника завдань, але, на жаль, я не міг знайти належне переривання або діяльність, яка могла б задовольнити мої потреби.

Дякуємо за будь-яку допомогу.

Відповіді:


0

Ви зробили 90% шляху до рішення. Якщо метод підключення здійснюється через RDP, можна запустити програму, коли користувач входить в систему. Покладіть команди "Пуск" у файл .BAT / .CMD і через вкладку "Додатково" RDP викликати його як частину входу користувача.


Дякую вам за вашу реакцію, на жаль, можливо, я чітко не сформулював своїх вимог: мені потрібна програма для запуску на локальному комп'ютері NO на віддаленому (НІ на комп'ютері, до якого користувач намагається підключитися). Часова послідовність повинна бути: 1) Користувач підключається до віддаленого комп'ютера 2) в той самий момент, на машинній програмі LOCAL P виконується 3) користувач припиняє віддалене з'єднання 4) в той самий момент, на машині LOCAL виконується програма Q Чи є у вас якісь пропозиції щодо цієї ситуації, будь ласка?
botajzorek

Якщо команди потрібні для запуску на локальній машині, можна спробувати команду "CALL". "CALL prog1.exe" буде чекати, поки prog1 не закінчиться і тільки потім продовжить наступну команду (prog2.exe).
Irony

Власне, ваш коментар допоміг мені у вирішенні ситуації. Я об'єднав Visual Basic простий скрипт і команду CALL для досягнення рішення. Велике спасибі.
botajzorek

0

Якщо 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" 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.