Executing batch file for postgre dbinit with NSIS gives permission denied
I just realised what the issue here is.
If you run postgres
as Administrator, it uses a special Windows API call to drop permissions (acquire a restricted token), so that it runs without full Administrator rights for security. See PostgreSQL utilities and restricted tokens on windows.
I suspect that what's happening here is that initdb
isn't creating the target data directory and setting its permissions before doing that, so it drops permissions and then doesn't have the permissions to create the data directory.
To work around it, simply md ..\data
to create the empty directory and then use icacls.exe
to grant appropriate permissions before you try to initdb
. Or, even better, store it in a more appropriate place like %PROGRAMDATA%\MyApp\pgdata
or whatever; application data should not go in %PROGRAMFILES%
.