У меня есть следующий сценарий для запуска приложения:PowerShell приложение ждать, чтобы запустить
add-type -AssemblyName microsoft.VisualBasic
add-type -AssemblyName System.Windows.Forms
$args = "arguments"
$proc = Start-Process -PassThru "path" -ArgumentList $args
start-sleep -Seconds 5
[Microsoft.VisualBasic.Interaction]::AppActivate($proc.Id)
[System.Windows.Forms.SendKeys]::SendWait("~")
Я использую этот скрипт для запуска нескольких приложений Windows Forms, которые требуют взаимодействия с пользователем, чтобы начать (т.е. нажать кнопку пуска). До сих пор я спал сценарий 5 секунд, чтобы приложение запускалось. Я попытался запустить этот скрипт на разных компьютерах с различными возможностями обработки, но не работал на всех компьютерах, некоторые запускали приложение медленнее, чем другие, когда для приложения было занято более 5 секунд, чтобы запустить скрипт, потому что AppActivate не удалось найти PID. Я не хочу попробовать разные времена сна для каждого компьютера, потому что я должен запустить этот скрипт на более чем 100 компьютерах во время загрузки.
Я хотел бы знать, есть ли способ дождаться, когда приложение начнет запускать событие.
UPDATE:
WaitForInputIdle не работает во всех приложениях, которые я пытался начать. Он возвращается немедленно (успешно, потому что он возвращает true), и метод AppActive генерирует исключение.
это поможет вам .... 'start-process -wait' (дождитесь завершения процесса) – Kiran
Нет, потому что он ждет завершения процесса, прежде чем принимать больше ввода. Я должен спящий сценарий в течение 5 секунд, иначе функция AppActivate выдает исключение, потому что он не нашел идентификатор процесса. – rena
Было бы потому, что вместо
-Seconds
это должно быть-s
PS. idk, почему код не работает o_O –