Encuentre la ruta pg_dump.exe en NSIS para llamar con la función Exec (¿o hay una mejor manera de hablar con postgres?)

Estoy creando un instalador de Windows 7 con NSIS para uso interno de la empresa. Un paso en la instalación es hacer una copia de seguridad de una base de datos Postgres usando pg_dump.exe, luego restaurar un archivo empaquetado en el uso pg_restore.exe instalado. Estos dos ejecutables son herramientas de ayuda normales incluidas con cualquier instalación de Postgres, por lo que se puede esperar que existan en la máquina del usuario. Quiero ejecutar esta operación así:

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'

Pero el problema que tengo es que la ruta de los ejecutables difiere de una máquina a otra. Así que estoy tratando de ejecutar una operación de búsqueda para encontrar los archivos. Como esto

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

O esto (usando localizar complemento)

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

Ambos métodos fallan en Windows 7. El instalador falla cuando la búsqueda atraviesa ciertos directorios; No estoy seguro de por qué.

Lo siguiente que me gustaría probar es buscar la ubicación de los ejecutables en el registro de Windows, con el comando NSIS ReadRegStr, tal vez algo como esto

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

Pero no puedo encontrar la clave de registro correcta para buscar pg_dump (o pg_restore).

¿Hay alguna forma de identificar la ruta de los archivos ejecutables instalados en Windows 7 mediante funciones NSIS nativas? ¿O hay una mejor manera de hacer una copia de seguridad y restaurar las bases de datos de Postgres con los instaladores de NSIS?

preguntado el 03 de mayo de 12 a las 21:05

1 Respuestas

Puede encontrar el directorio de instalación (si se instaló a través del instalador de un clic) en

HKLM\PostgreSQL\Instalación\postgresql-9.1\Directorio base

aparentemente esta clave depende de la versión. Y puede haber más de una entrada (si hay más de una versión instalada). Por lo tanto, deberá enumerar las entradas y elegir la versión que más le convenga.

Luego anexa \bin al valor obtenido de "Base Directory" y pg_dump/pg_restore debería estar allí.

contestado el 03 de mayo de 12 a las 23:05

Algunos consejos para elegir una versión de pg_dump/pg_restore si existe más de una: (1) Use la misma versión principal para pg_dump y pg_restore. (2) Haga coincidir la versión principal de la base de datos de destino si es posible. (3) Usar una versión principal al menos tan alto como la base de datos de origen. (4) Utilice la última menor de edad versión (número más allá del segundo punto decimal en el número de versión) disponible. Al interpretar los números de versión, cada grupo de dígitos numéricos debe interpretarse como un número entero, no como una cadena; 10 debe comparar más alto que 9. - kgrittn

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.