跟随我的上一个问题 https://stackoverflow.com/questions/30924913/how-to-install-postgres-with-nsis-with-all-parameters我现在尝试通过 NSIS 代码执行批处理文件,以便在解压缩后成功设置 postgres 安装。批处理文件包含初始化数据库的命令,但由于权限限制而失败。我使用的是 Win7 x64 电脑。我的用户帐户是管理员,我使用以下命令启动Setup.exeRun as adminitrator
选项。这是我得到的错误:
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”。 initdb:找不到合适的文本搜索
区域设置“Bulgarian_ Bulgaria.1251”的配置 默认文本
搜索配置将设置为“简单”。
数据页校验和被禁用。
正在创建目录../data ... initdb:无法创建目录
“../data”:权限被拒绝
EDIT:在对安装程序进行了更多修改之后,我找到了问题的根源。当安装位于 Program Files 文件夹中时,我无法以任何方式执行以下命令:
initdb -U postgres -A password --pwfile "pwd.txt" -E utf8 -D "..\data"
我尝试从 .bat 文件。我尝试从 .cmd 文件。我从命令提示符手动尝试。我尝试以管理员身份启动。所有的尝试都导致了Permission denied
error
EDIT2:我没有找到任何方法来解决这个问题,所以我做了一个解决方法。现在我分发 postgres,其数据目录已经初始化。然后我只需要创建服务并启动它。
我刚刚意识到这里的问题是什么。
如果你跑postgres
作为管理员,它使用特殊的 Windows API 调用删除权限(获取受限令牌),以便它在没有完全管理员权限的情况下运行以确保安全。看Windows 上的 PostgreSQL 实用程序和受限令牌 http://michael.otacoo.com/postgresql-2/postgres-utilities-restricted-token/.
我怀疑这里发生的事情是这样的initdb
没有创建目标数据目录并设置其权限before这样做,所以它会删除权限,然后没有创建数据目录的权限。
要解决这个问题,只需md ..\data
创建空目录,然后使用icacls.exe
在尝试之前授予适当的权限initdb
。或者,更好的是,将其存储在更合适的地方,例如%PROGRAMDATA%\MyApp\pgdata
管他呢;应用程序数据应not go in %PROGRAMFILES%
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)