关注我previous question我现在尝试通过NSIS代码执行批处理文件,以便在解压缩后成功设置postgres安装。批处理文件包含用于初始化数据库的命令,但由于权限限制而失败。我在Win7 x64 PC上。我的用户帐户是管理员,我使用Run as adminitrator
选项启动Setup.exe。这是我得到的错误:
C:\ Program Files(x86)\ Poker Assistant> cd" pgsql \ bin" C:\ Program Files(x86)\ Poker Assistant \ pgsql \ bin> initdb -U postgres -A 密码 --pwfile" pwd.txt" -E utf8 -D" .. \ data"属于该数据库系统的文件将归用户" Mandarinite"。
所有此用户还必须拥有服务器进程。
将使用区域设置初始化数据库群集 " Bulgarian_Bulgaria.1251&#34 ;. initdb:找不到合适的文本搜索 区域设置" Bulgarian_ Bulgaria.1251"默认文字 搜索配置将设置为"简单"。
禁用数据页校验和。
创建目录../data ... initdb:无法创建目录 " ../ data":权限被拒绝
编辑:在使用安装程序修补一下后,我找到了问题的根源。当安装位于Program Files文件夹中时,我无法以任何方式执行以下命令:
initdb -U postgres -A password --pwfile "pwd.txt" -E utf8 -D "..\data"
我试过.bat文件。我试过.cmd文件。我尝试从命令提示符手动。我尝试以管理员身份启动。所有尝试都导致Permission denied
错误
EDIT2:我没有找到解决问题的方法,所以我做了一个解决方法。现在我分发postgres,其数据目录已经初始化。然后我只需要创建服务并启动它。
答案 0 :(得分:2)
我刚刚意识到这里的问题是什么。
如果您以管理员身份运行postgres
,它会使用特殊的Windows API调用删除权限(获取受限制的令牌),以便在没有完全管理员安全权限的情况下运行它。请参阅PostgreSQL utilities and restricted tokens on windows。
我怀疑这里发生的是initdb
创建目标数据目录并在执行此操作之前设置其权限,因此它会删除权限和然后没有权限来创建数据目录。
要解决此问题,只需md ..\data
创建空目录,然后在尝试icacls.exe
之前使用initdb
授予适当的权限。或者,更好的是,将它存储在更合适的地方,如%PROGRAMDATA%\MyApp\pgdata
或其他任何地方;应用程序数据应该不进入%PROGRAMFILES%
。