我会用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`
但我遇到了UserMgr::CreateAccountEx
的问题,但我已导入了所有必需的文件。
答案 0 :(得分:7)
您需要做的就是创建一个数据目录:
initdb -D %PROGRAMDATA%\MyApp\data
然后安装PostgreSQL配置文件pg_hba.conf
或对initdb
%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
请不要使用默认端口5432.在非默认端口上运行,该端口不会与任何现有或未来的PostgreSQL安装发生冲突。另外,请勿使用"标准"服务名称,如postgresql-9.2
。
(NSIS可能会提供启动服务的命令,而不是使用net start
。如果是,请使用适当的NSIS命令。)
请注意%PROGRAMDATA%
仅针对Windows Vista及更高版本定义(默认情况下,它指向%SYSTEMDRIVE%\ProgramData
)。您可以在Windows XP上使用%ALLUSERSPROFILE%
,但是真的,谁现在关心XP?
就个人而言,我建议使用带有WiX的MSI安装程序。
答案 1 :(得分:0)
对于那些正在寻找非常小的 Postgresql 13 安装包的人,它只是以下文件夹:
bin
lib
share
它没有考虑任何特殊情况。每个单独的设置都必须经过测试,在我上面的例子中工作正常。