Я создаю приложение wpf, для которого требуется предварительное условие. Если эти предварительные условия не выполняются, я спрашиваю пользователя, хочет ли он установить обязательное предварительное условие: Распространяемый пакет Microsoft Visual C ++ 2010 SP1 .
Поэтому, если пользователь выбрал установку пререквизита, я выполню vcredist_x86.exe (это файл, который загружается по первой предоставленной мной ссылке).
Тогда в моем приложении я смогу узнать, когда установка будет завершена, выполнив что-то вроде:
ProcessStartInfo psi = new ProcessStartInfo(@"vcredist_x86.exe");
var p = new Process(); p.StartInfo = psi;
p.Start(); //start the process
p.WaitForExit(); // wait for the installation to finish
// installation should be done now
Хорошо, пока все отлично работает. Проблема в том, что у меня есть индикатор выполнения в моем приложении wpf, и я хотел бы показать прогресс там.
Мне удалось показать ход установки, выполнив следующие действия:
Существует программа под названием AutoIt , которая отлично подходит для автоматизации простых задач. Например, я могу легко определить, существует ли окно с autoit, используя что-то вроде:
Затем я мог бы скомпилировать этот скрипт и создать очень маленький исполняемый файл. В этом исполняемом файле я верну 1, если указанное окно существует или 0 в противном случае.
Когда пользователь переходит к следующему окну, мой скрипт может вернуть 2, потому что это другое окно. AutoIt также может видеть прогресс индикатора выполнения окна !!! так что если этот скрипт возвращает 80 например, я обновлю свой прогресс до 80%, например.
Я делаю это, делая что-то вроде:
// start the autoitExecutable....
// wait for executable to exit usually takes 10 miliseconds it is fast
if (autoitProcess.ExitCode == 1)
{
// do somthing
}else if(autoitProcess.ExitCode == 2)
{
// do something else
} //etc....
Как видите, мне приходится выполнять этот скрипт каждую 1 секунду, чтобы определить, какие изменения были внесены, чтобы обновить мой индикатор выполнения в WPF. Это работает, но каждый раз, когда я выполняю этот исполняемый файл с помощью c #, я получаю:
курсор в течение примерно 500 миллисекунд, затем в следующую секунду он появляется снова. Это становится раздражающим, хотя окна не появляются. Было бы хорошо, если бы я мог как-то избавиться от этого курсора и выполнить этот исполняемый файл без вывода сообщений. когда я выполняю исполняемый файл autoit, не появляется ни окон, ни других.
приписка
Я знаю, что мог бы использовать c # для проверки существования окна и, возможно, увидеть значение обработчика другого окна, точно так же, как autoit может это сделать, но создать эти программы с AutoIt очень просто, и это будет хорошо если бы я мог использовать AutoIt вместо C # для такого рода taks