2

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を超えていましたが(正常に実行されました)、パスワード認証に失敗しました。パスワードが失敗した場合にスクリプトが失敗したかどうかをdelphiで確認する方法はありますか?が作成されていない可能性があるためpgpass.conf、ファイルでユーザーパスワードを確認できません。ユーザーがパスワードを知らないか、間違ったパスワードを入力した可能性があります。

プログラムで認証が失敗したかどうかを確認する方法は?

注:Postgresql 9.0

4

1 に答える 1

3

戻り値は 32 を超えていました (したがって、正常に実行されました)。

いいえ、そうではありません。http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153.aspx 正常に開始されたことを意味するだけです。完全な実行が成功したかどうか、MSDN は、ShellExecute/ShellExecuteEx を使用して知る方法がないことを示唆しています。

CreateProcess を使用して実行中のタスク ハンドルを取得し、WaitFor を使用して結果を取得するか、出力をインターセプトして特定の行を探す必要があります。

JclSysUtilsユニットにExecute関数とTJclCommandLineToolクラスがあり、これをカプセル化するJedi Code Libraryを試すことができます。使用例は、DCC32.EXE などの多くのコマンドライン ユーティリティを呼び出す JCL インストーラです。出力をキャプチャしてログに保存し、リターン コードをチェックします。

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 もプログラムする必要があります。本当に必要ですか?

于 2012-09-11T06:27:14.510 に答える