Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проверка завершения процесса удаления psqlodbc перед удалением PostgreSQL

Delphi , Графика и Игры , Canvas

Проверка завершения процесса удаления psqlodbc перед удалением PostgreSQL

При разработке программного обеспечения, которое требует драйверов psqlodbc и базы данных PostgreSQL 9.0, вы можете столкнуться с необходимостью удаления этих компонентов с системы. В этой статье мы рассмотрим, как проверить завершение процесса удаления psqlodbc перед удалением PostgreSQL.

Описание проблемы

Вы создали установочный пакет с помощью Delphi 7, который устанавливает tanto psqlodbc, как и PostgreSQL 9, в режиме тихого установочного процесса, один за другим при нажатии одной кнопки. При удалении вы хотите сначала удалить psqlodbc, а затем PostgreSQL 9, также при нажатии одной кнопки.

Для запуска установочного пакета PostgreSQL 9 с помощью ShellApi после удаления psqlodbc вы проверяете наличие процесса 'cmd.exe'. Однако sometimes после удаления psqlodbc 'cmd.exe' остается открытым, и установочный пакет PostgreSQL не может быть выполнен.

Решение проблемы

Для решения этой проблемы вы можете проверить, завершился ли процесс удаления psqlodbc, используя функцию ExecAndWait, которая ждет завершения процесса удаления msiexec и возвращает true, если процесс завершился успешно. Вот как это сделать:

function TForm1.ExecAndWait(const CommandLine: string): Boolean;
var
  StartupInfo: Windows.TStartupInfo;
  ProcessInfo: Windows.TProcessInformation;
  ProcessExitCode: Windows.DWord;
begin
  // Set default error result
  Result := False;

  // Initialise startup info structure to 0, and record length
  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  StartupInfo.cb := SizeOf(StartupInfo);

  // Execute application commandline
  if Windows.CreateProcess(nil, PChar(CommandLine),
    nil, nil, False, 0, nil, nil,
    StartupInfo, ProcessInfo) then
  begin
    try
      // Now wait for application to complete
      if Windows.WaitForSingleObject(ProcessInfo.hProcess, INFINITE) = WAIT_OBJECT_0 then
      // It's completed - get its exit code
      if Windows.GetExitCodeProcess(ProcessInfo.hProcess, ProcessExitCode) then
      // Check exit code is zero => successful completion
      if ProcessExitCode = 0 then
        Result := True;
    finally
      // Tidy up
      Windows.CloseHandle(ProcessInfo.hProcess);
      Windows.CloseHandle(ProcessInfo.hThread);
    end;
  end;
end;

Теперь вы можете использовать эту функцию для проверки завершения процесса удаления psqlodbc перед удалением PostgreSQL:

if ExecAndWait('msiexec /x "C:\psqlodbc09\psqlodbc.msi"') then
begin
  // Удаление PostgreSQL...
end;

Альтернативный ответ

Другой способ проверить, удалена ли psqlodbc, - это проверить наличие записи в реестре. При установке psqlodbc вы увидите запись в реестре, а при удалении - нет. Однако, как отметил один из комментаторов, запись в реестре удаляется во время процесса удаления, а не после его завершения.

Заключение

Проверить завершение процесса удаления psqlodbc перед удалением PostgreSQL можно с помощью функции ExecAndWait, которая ждет завершения процесса удаления msiexec и возвращает true, если процесс завершился успешно. Это гарантирует, что удаление psqlodbc завершилось перед удалением PostgreSQL.

Создано по материалам из источника по ссылке.

При разработке программного обеспечения, которое использует драйверы psqlodbc и базу данных PostgreSQL 9.0, важно правильно удалить эти компоненты с системы. В этой статье рассматривается, как проверить завершение процесса удаления psqlodbc перед удаление


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Canvas ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 14:22:30/0.0037200450897217/0