Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 21:04   #1
Sergey1974
 
Регистрация: 09.12.2009
Сообщений: 6
По умолчанию Странное поведение процедуры

Вот процедура:

Код:
procedure TfrmMain.StartAppAndWait(AppPath, Param: string);
var exInfo: TShellExecuteInfo;
    Ph: DWORD;
begin
   FillChar(exInfo, SizeOf(exInfo), 0);
   with exInfo do
   begin
      cbSize := SizeOf(exInfo);
      fMask := SEE_MASK_NOCLOSEPROCESS;
      Wnd := GetActiveWindow();
      ExInfo.lpVerb := 'open';
      lpFile := PChar(AppPath);
      lpParameters := PChar(Param);
      nShow := SW_SHOWNORMAL;
   end;
   if ShellExecuteEx(@exInfo) then
      Ph := exInfo.HProcess
   else
      Exit;
   //while WaitForSingleObject(ExInfo.hProcess, INFINITE) <> WAIT_OBJECT_0 do
   //   Application.ProcessMessages;
   WaitForSingleObject(ExInfo.hProcess, INFINITE);
   CloseHandle(Ph);
end;
Использую так:

Код:
StartAppAndWait(ExtractFilePath(Application.ExeName) + 'install\addon.exe', '');
НО! Если запускать программу с жесткого диска - процедура отрабатывает как надо, ожидается завершение запущенной программы и потом управление идет на следующий оператор. А вот если ее запустить со съемного носителя - флэшки или CD - процедура пролетает без задержек, то есть она запускает процесс и его ожидания не происходит, а управление бежит дальше... Чего то я уже голову сломал - в чем причина?
Sergey1974 вне форума Ответить с цитированием
Старый 11.12.2009, 21:21   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...попробуй изменить проверку:
Код:
...
if ShellExecuteEx(@exInfo) then
  begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(exInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
    Result:=True
  end
  else Result:=False;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 11.12.2009, 21:41   #3
Sergey1974
 
Регистрация: 09.12.2009
Сообщений: 6
По умолчанию

Не помогло... Ситуация прежняя - с жесткого работает, с флэшки нет.
Sergey1974 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение TTreeView mutabor Компоненты Delphi 1 01.05.2009 05:17
Че-то странное .... ~Brilliant~ Безопасность, Шифрование 9 27.04.2009 13:57
Странное поведение базы yulia БД в Delphi 7 22.04.2009 07:15
Странное поведение DLL Yurk@ Компоненты Delphi 4 01.02.2009 01:23
Странное поведение ПОИСКПОЗ ZORRO2005 Microsoft Office Excel 5 19.05.2008 14:02