社内で使用するために、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データベースをバックアップおよび復元するためのより良い方法はありますか?