我正在处理需要psqlodbc驱动程序和postgresSQl 9.0数据库的软件, 我们有一个使用delphi 7设计的安装程序,可以安静地安装psqlodbc和postgreSQl 9 点击一个按钮一个接一个,这里一切都运行正常, 但问题出在卸载期间 我首先想要解压缩psqlodbc,然后在sinlge按钮上单击postgreSQl 9,
我想在psqlodbc卸载后才使用shellpApi运行postgreSQl 9 unistaller, 截至目前我正在检查' cmd.exe'正在运行或不运行postgreSQl卸载程序,但有时在卸载psqlodbc之后“cmd.exe”#39;保留在postgreSQl unistaller无法执行,
所以请告诉我 如何检查psqlodbc卸载过程是否完全。
文件是 1.psqlodbc.msi 2.postgresql-9.0.2-1-windows.exe后
使用bat文件处理安装/卸载
感谢先进:)
答案 0 :(得分:1)
如果驱动程序可用,您可以检查注册表。安装完成后,您将获得:
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>
(此menas:错误:系统无法在注册表中找到键或值)
请参阅:reg /?
了解如何使用它以及您可以批量使用的返回代码。
您还可以在HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
答案 1 :(得分:0)
我得到了如何检查psqlodbc是否已完全卸载,以便我可以开始取消postgres
为此,我找到了解决方案 On stackoverflow itself
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;