使用NSIS安装postgresql

use*_*832 1 postgresql nsis

我会用NSIS安装程序安装postgresql,但我不知道怎么做.

你能帮我吗 ?

我找到了这段代码

outfile "C:\project-open\installer\install_postgres.exe"
Name "Install PostgreSQL"

!include Registry.nsh
!include LogicLib.nsh
!include MultiUser.nsh
!include Sections.nsh
!include MUI2.nsh`

!define TARGET c:\project-open

Function .onInit
   StrCpy $INSTDIR "c:\project-open"
FunctionEnd

section
    UserMgr::CreateAccountEx "postgres" "*******" "PostgreSQL" "PostgreSQL Database      User" "Database user created by ]po[ installer" "UF_PASSWD_NOTREQD|UF_DONT_EXPIRE_PASSWD"
pop $R0
DetailPrint "After creating account: result=$R0"`

UserMgr::AddPrivilege "postgres" "SeBatchLogonRight"
pop $R0
DetailPrint "SeBatchLogonRight: result=$R0"

UserMgr::AddPrivilege "postgres" "SeServiceLogonRight"
pop $R0
DetailPrint "SeServiceLogonRight: result=$R0"

nsExec::ExecToLog '"$INSTDIR\pgsql\bin\initdb.exe" --username=postgres --locale=C --encoding=UTF8 -D "$INSTDIR\pgsql\data"'
pop $R0
DetailPrint "After initializing database: result=$R0"

nsExec::ExecToLog 'sc create postgresql-9.2 binpath= "c:\project-open\pgsql\bin\pg_ctl.exe runservice -N postgresql-9.2 -D c:/project-open/pgsql/data -w" DisplayName= "PostgreSQL 9.2" start= "demand" type= own obj= ".\postgres" password= "******" '
pop $R0
DetailPrint "After registering the service: result=$R0"sectionEnd`
Run Code Online (Sandbox Code Playgroud)

但我有问题,UserMgr::CreateAccountEx但我已导入所需的所有文件.

Cra*_*ger 7

您需要做的就是创建一个数据目录:

initdb -D %PROGRAMDATA%\MyApp\data
Run Code Online (Sandbox Code Playgroud)

然后安装PostgreSQL配置文件,pg_hba.conf或者对initdbat %PROGRAMDATA%\MyApp\data\postgresql.conf%PROGRAMDATA%\MyApp\data\pg_hba.conf.自动生成的文件进行任何必要的编辑.

然后:

pg_ctl register -D %PROGRAMDATA%\MyApp\data -S auto -N postgres-MyApp -U NETWORKSERVICE

net start postgres-MyApp
Run Code Online (Sandbox Code Playgroud)

不要使用默认端口5432.在非默认端口上运行,该端口不会与任何现有或未来的Pos​​tgreSQL安装冲突.另外,请勿使用"标准"服务名称postgresql-9.2.

(NSIS可能会提供启动服务的命令,而不是使用net start.如果是,请使用相应的NSIS命令).

请注意,%PROGRAMDATA%仅针对Windows Vista及更高版本(%SYSTEMDRIVE%\ProgramData默认情况下指向的位置)定义.你可以%ALLUSERSPROFILE%在Windows XP上使用,但真的,谁现在关心XP?


就个人而言,我建议使用带有WiX的MSI安装程序.

  • 我不建议将应用程序数据放入`%PROGRAMFILES%`(对于常规的 Postgres 安装程序,这也是我真正困扰的地方)。该目录仅供管理员写入,不应用于存储应用程序数据。 (3认同)
  • 我停止使用 Windows 的 EDB 安装程序。我只是下载二进制文件,解压缩它们并手动运行 `initdb` 和 `pg_ctl -register`。 (3认同)