Выполнить процесс / программу без вывода сообщений - PullRequest
2 голосов
/ 15 февраля 2012

Я создаю приложение 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, используя что-то вроде: enter image description here

Затем я мог бы скомпилировать этот скрипт и создать очень маленький исполняемый файл. В этом исполняемом файле я верну 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 #, я получаю:

enter image description here

курсор в течение примерно 500 миллисекунд, затем в следующую секунду он появляется снова. Это становится раздражающим, хотя окна не появляются. Было бы хорошо, если бы я мог как-то избавиться от этого курсора и выполнить этот исполняемый файл без вывода сообщений. когда я выполняю исполняемый файл autoit, не появляется ни окон, ни других.

приписка

Я знаю, что мог бы использовать c # для проверки существования окна и, возможно, увидеть значение обработчика другого окна, точно так же, как autoit может это сделать, но создать эти программы с AutoIt очень просто, и это будет хорошо если бы я мог использовать AutoIt вместо C # для такого рода taks

Ответы [ 2 ]

1 голос
/ 30 августа 2012

Я видел такое поведение, когда exe-файл был установлен как «приложение windows», а не как «консольное приложение».

Изменение типа на консоль больше не дает занятого курсора при запуске.

0 голосов
/ 15 февраля 2012

Вы также можете добавить обработчик события, например,

System.Diagnostics.ProcessStartInfo p = new 
     System.Diagnostics.ProcessStartInfo(@"vcredist_x86.exe") ;
p.Arguments="-RunForever";
proc = new System.Diagnostics.Process();
proc.StartInfo = p;
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(myProcess_Exited);
proc.Start();

внутри события, если бы я хотел сделать что-то подобное

// Inside the form class:

private System.Diagnostics.Process proc;

private void myProcess_Exited(object sender, System.EventArgs e)
{
    button3.BackColor=Color.LightGreen;  //success indicator
}

, если вы хотите сделать это вХотя в Loop вы также можете сделать что-то подобное, например, но вам придется изменить параметры, чтобы они соответствовали коду вашего примера, который вы можете использовать

while(!autoitProcess.WaitForExit(someTimeout))
{ 
   if(ShouldCancel)
   {
      break;
   }
}

, имеет ли это смысл или помогает ...?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...