我正在使用 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 数据库?