0

我正在使用 NSIS 构建一个 Windows 7 安装程序,供公司内部使用。安装的一个步骤是使用 pg_dump.exe 备份 Postgres DB,然后恢复打包在已安装的 usign pg_restore.exe 中的文件。这两个可执行文件是任何 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 插件

${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

这两种方法在 Windows 7 上都失败了。当搜索遍历某些目录时,安装程​​序崩溃;我不确定为什么。

接下来我想尝试使用 NSIS 命令在 Windows 注册表中查找可执行文件的位置ReadRegStr,可能是这样的

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

但我找不到用于查找 pg_dump(或 pg_restore)的正确注册表项。

有没有办法使用本机 NSIS 函数识别 Windows 7 上已安装可执行文件的路径?或者有没有更好的方法来使用 NSIS 安装程序备份和恢复 Postgres 数据库?

4

1 回答 1

1

您可以在以下位置找到安装目录(如果是通过一键安装程序安装的)

HKLM\PostgreSQL\Installation\postgresql-9.1\Base 目录

显然这个键是版本相关的。并且可以有多个条目(如果安装了多个版本)。因此,您需要枚举条目并选择适合您的任何版本。

然后附加\bin到从“基本目录”获得的值,pg_dump/pg_restore 应该在那里。

于 2012-05-03T22:54:15.307 回答