Проверьте, был ли psqlodbc удален из системы или нет - PullRequest
2 голосов
/ 23 ноября 2011

Я работаю над программным обеспечением, для которого требуются драйверы psqlodbc и база данных postgresSQl 9.0, у нас есть установщик, разработанный с использованием delphi 7 для автоматической установки psqlodbc и postgreSQl 9 один за другим нажатием одной кнопки, здесь все работает нормально, нопроблема во время удаления, сначала я хочу удалить psqlodbc, а затем postgreSQl 9 также при нажатии кнопки sinlge,

я хочу запустить unistaller postgreSQl 9 с помощью shellpApi только после удаления psqlodbc, и сейчас я проверяю«cmd.exe» запущен или не запускается деинсталлятор postgreSQl, но иногда после удаления psqlodbc «cmd.exe» остается в unistaller postgreSQl, который не может быть выполнен,

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

файлы 1.psqlodbc.msi 2.postgresql-9.0.2-1-windows.exe

установка / удаление выполняется с файлом bat

спасибо заранее:)

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Вы можете проверить реестр, если драйвер доступен. После установки вы получите:

c:\tmp\pg>reg query "hklm\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL ANSI"

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL ANSI
    APILevel    REG_SZ  1
    ConnectFunctions    REG_SZ  YYN
    Driver      REG_SZ  C:\Program Files\psqlODBC\0900\bin\psqlodbc30a.dll
    DriverODBCVer       REG_SZ  03.00
    FileUsage   REG_SZ  0
    Setup       REG_SZ  C:\Program Files\psqlODBC\0900\bin\psqlodbc30a.dll
    SQLLevel    REG_SZ  1
    UsageCount  REG_DWORD       0x1

И когда вы удалите его, вы получите (локализованная версия):

c:\tmp\pg>reg query "hklm\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL ANSI"

Błąd: system nie może odnaleźć określonego klucza rejestru lub wartości.

c:\tmp\pg>

(это меню: Ошибка: система не может найти ключ или значение в реестре)

См. reg /? о том, как его использовать и для кода возврата, который вы можете использовать в пакете.

Вы также можете искать информацию об удалении реестра в HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall

0 голосов
/ 10 декабря 2011

Я получил, как проверить, полностью ли удален psqlodbc, чтобы я мог начать удаление postgres

Для этого я нашел решение На самом стеке

function TForm1.ExecAndWait(const CommandLine: string) : Boolean;
var
 StartupInfo: Windows.TStartupInfo;        // start-up info passed to process
 ProcessInfo: Windows.TProcessInformation; // info about the process
 ProcessExitCode: Windows.DWord;           // process's exit code
  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;

так шаг № 1 if ExecAndWait('msiexec /x C:\psqlodbc09\psqlodbc.msi') then begin //uninstall postgresNow...!! end;

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