запуск и ожидание завершения приложения
От: WizardEye  
Дата: 05.04.16 07:59
Оценка:
Добрый день.
Давно уже пользуюсь функцией запуска и завершения приложения, которая была много раз написана на форумах, и вроде до сего момента нормально работала:
function RunAppWait(appName: string): cardinal;
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  cpResult  : boolean;
begin
  FillChar(SI, SizeOf(SI), 0);
  with SI do begin
    cb := SizeOf(SI);
    dwFlags:=STARTF_USESHOWWINDOW;
    wShowWindow:=SW_SHOWNORMAL;
  end;
  cpResult := CreateProcess(nil,
                            PWideChar(appName),
                            nil,
                            nil,
                            False,
                            CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                            nil,
                            nil,
                            SI,
                            PI);
  if cpResult then begin
    WaitforSingleObject(pi.hProcess,INFINITE);
    GetExitCodeProcess(pi.hProcess,Result);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
  end
  else Result:=GetLastError;
end;

Так вот пытаюсь с помощью этого кода запустить удаление программы, деинсталлятор нормально запускается, но WaitForSingleObject сразу завершается с результатом WAIT_OBJECT_0, то бишь программа завершилась, а на самом деле я еще ничего делать не начинал, деинсталлятор не отработал, программа не удалена.
Дайте идеи, где тут собака порылась?
Re: запуск и ожидание завершения приложения
От: WizardEye  
Дата: 05.04.16 08:08
Оценка:
Сам же и отвечу.
Код работает правильно.
Деинсталлятор создает "временное" приложение, передает ему управление, а сам закрывается. Окно удаления программы — это уже не то приложение, которое я запускаю.
Соответственно вопрос меняется: КАК ОТСЛЕДИТЬ ЗАВЕРШЕНИЕ УДАЛЕНИЯ ПРОГРАММЫ?
Re[2]: запуск и ожидание завершения приложения
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 08.04.16 06:40
Оценка:
Здравствуйте, WizardEye, Вы писали:

WE>Деинсталлятор создает "временное" приложение, передает ему управление, а сам закрывается. Окно удаления программы — это уже не то приложение, которое я запускаю.

WE>Соответственно вопрос меняется: КАК ОТСЛЕДИТЬ ЗАВЕРШЕНИЕ УДАЛЕНИЯ ПРОГРАММЫ?

Смотреть на список процессов или искать окно по заголовку на предмет наличия этого "временщика".
WBR, Dmitry Beloshistov AKA [-=BDS=-]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.