Skip to content
⌘ NSIS Forum Archive

File permissions

4 posts

freakinout#

File permissions

I need to install files to a subdirectory under the All Users $APPDATA directory and all users need to have read/write access to the files in that subdirectory as well as the ability to create files in that subdirectory. What I have now is something like this:
.
.
.
SetShellVarContext all
SetOutPath "$APPDATA\SharedStuff"
File "EveryoneReadWrite1.txt"
File "EveryoneReadWrite2.txt"
.
.
.
The permissions for SharedStuff and the two files it contains end up inherited from the $APPDATA folder. Some system adminstrators have set the permissions on $APPDATA to be very restrictive. I need to set the permissions for SharedStuff to not inherit from $APPDATA and allow 'Full Control'. How do I do this with NSIS?
freakinout#
Thank you.
I was hoping it was an instruction that I had overlooked (something like SetFilePremissions fullControl) that the SetOutPath and File instructions would use when creating folders and files. Oh well, this will work.
Thanks again.
freakinout#
In my search for alternate solutions I found the AccessControl plugin.


However, I ended up creating the base directory prior to installing the files using the System plugin.

!define SECURITY_ATTRIBUTES '(&l4, i, i) i'
.
.
.
SetShellVarContext all

SetPluginUnload alwaysoff
System::Call "advapi32::ConvertStringSecurityDescriptorToSecurityDescriptorA(
t 'D🙁A;OICI;GA;;;AU)(A;;GA;;;BA)(A;;GA;;;SY)', i 1, *i .r0, i 0) i.r5"
System::Call '*${SECURITY_ATTRIBUTES}(12, r0, 0) .r1'
System::Call "kernel32::CreateDirectoryA(t '$APPDATA\CompanyName', i r1) i.r5"
System::Call "kernel32::LocalFree(i r0) i.r5"
SetPluginUnload manual
System::Free $1

SetOutPath "$APPDATA\CompanyName\Templates"
File "Template1.txt"
File "Template2.txt"