0

社内で使用するために、NSISを使用してWindows7インストーラーを構築しています。インストールの1つのステップは、pg_dump.exeを使用してPostgres DBをバックアップしてから、インストールされたusignpg_restore.exeにパッケージ化されたファイルを復元することです。これらの2つの実行可能ファイルは、Postgresのインストールに含まれる通常のヘルパーツールであるため、ユーザーのマシンに存在することが期待できます。この操作を次のように実行したい:

ExecWait 'C:\path\to\file\pg_dump.exe --host localhost --port 5432 --username "postgres" --no-password  --format custom --blobs --verbose --file $OUTDIR/myDB.backup myDB' $0
DetailPrint 'Backup DB process return $0'

しかし、私が抱えている問題は、実行可能ファイルのパスがマシンごとに異なることです。だから私はファイルを見つけるために検索操作を実行しようとしています。このような

${Locate} "C:\" "/L=F /M=pg_dump.exe" "locateBackup"

またはこれ(ロケートプラグインを使用)

${locate::Open} "C:\" `/F=1 /D=0 /X=exe /-PN="Oracle" /-PF="$WINDIR\System|$WINDIR\System32|$WINDIR\Help" /N=pg_dump.exe /B=1` $0
${locate::Find} $0 $1 $2 $3 $4 $5 $6

これらの方法はどちらもWindows7では失敗します。検索が特定のディレクトリを通過するとインストーラーがクラッシュします。理由はわかりません。

次に試したいのは、NSISコマンドを使用して、Windowsレジストリ内の実行可能ファイルの場所を検索することですReadRegStr

ReadRegStr $0 HKLM Software\pg_dump ""
DetailPrint "Its installed at: $0"

しかし、pg_dump(またはpg_restore)を検索するための適切なレジストリキーが見つかりません。

ネイティブNSIS関数を使用してWindows7にインストールされた実行可能ファイルのパスを識別する方法はありますか?または、NSISインストーラーを使用してPostgresデータベースをバックアップおよび復元するためのより良い方法はありますか?

4

1 に答える 1

1

インストールディレクトリ(ワンクリックインストーラーでインストールされた場合)は、次の場所にあります。

HKLM \ PostgreSQL \ Installation \ postgresql-9.1 \ Base Directory

どうやらこのキーはバージョンに依存しています。また、複数のエントリが存在する可能性があります(複数のバージョンがインストールされている場合)。したがって、エントリを列挙し、自分に合ったバージョンを選択する必要があります。

次に、「ベースディレクトリ」から取得した値に追加\binすると、pg_dump/pg_restoreがそこにあるはずです。

于 2012-05-03T22:54:15.307 に答える