使用Delphi
你怎么能找到psql脚本已经返回
password authentication has failed for user "myadmin"
运行以下脚本(psqlRun.bat)时
"C:\Program Files\PostgreSQL\9.0\bin\psql.exe" -h localhost -p 5433 -d TestDB -U myadmin -f someSQLscript.sql
上面的脚本是使用shellexecute运行的
ReturnedValue:= ShellExecute(Handle,'open',PChar('C:\psqlRun.bat'), nil, nil, SW_SHOWNORMAL);
返回值超过32(so it ran successfully)
但对我来说密码验证失败了..
有没有办法通过delphi找到密码失败的脚本失败?
由于可能尚未创建pgpass.conf
,因此我无法检查文件中的用户密码。
用户可能不知道密码或输入了错误的密码。
以编程方式如何检查身份验证是否失败?
注意:Postgresql 9.0
答案 0 :(得分:3)
返回值超过32(因此成功运行)
不,这并不意味着它。 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153.aspx 这只意味着它已成功启动。如果完整运行成功与否,MSDN提示无法知道使用ShellExecute / ShellExecuteEx。
您应该使用CreateProcess来获取正在运行的任务句柄,然后使用WaitFor获取结果或拦截它的输出以查找特定行。
您可以尝试Jedi代码库,其中JclSysUtils单元具有Execute函数,TJclCommandLineTool类用于封装它。 使用示例是JCL安装程序,它调用许多命令行工具,如DCC32.EXE,捕获并保存其输出到日志并检查返回代码。
PS。你最好不要使用bat文件。创建命令行并直接运行它。截至目前,你把它变成了一棵树。
YourProg.exe
\\-> CMD.EXE /C BAT-FILE-NAME
\\->pgSQL exe with options
即使pgSQL.exe返回某些内容,它也不会返回到您的程序而是返回到CMD.exe
之后,CMD.exe将该代码暴露给其内部变量%ERRORLEVEL%
现在你必须要知道它是否可以将该变量传递给你的程序。
为什么?每个下一个间接级别都会使您的程序更加孤立和脆弱。只需直接调用PG EXE,无需脚本。否则你应该为CMD.EXE编程 - 你真的需要吗?