views:

3174

answers:

4

I'm trying to build a Windows installer using Nullsoft Install System that requires installation by an Administrator. The installer makes a "logs" directory. Since regular users can run this application, that directory needs to be writable by regular users. How do I specify that all users should have permission to have write access to that directory in the NSIS script language?

I admit that this sounds a like a sort of bad idea, but the application is just an internal app used by only a few people on a private network. I just need the log files saved so that I can see why the app is broken if something bad happens. The users can't be made administrator.

A: 

One way: call the shell, and use cacls or xcacls.

Sören Kuklau
A: 

Why not create a log-directory in the user's %APPDATA% directory? Do you really need to put all the logs in the install directory? Why?

JesperE
I want other users to be able to view the logs too. If they are in the users APPDATA directory, then if user 1 runs the app, only user 1 or an admin can see the log file.
Jay R.
+7  A: 

Use the AccessControl plugin and then add this to the script, where the "logs" directory is in the install directory.

AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess"

That gives full access to the folder for all users.

Jay R.
+2  A: 

Instead of changing the permissions on directories under Program Files, why not put the logs in a location that is writeable by all users.

See the 4.9.7.7 SetShellVarContext section in your NSIS documentation. You can use it with $APPDATA to get the application data folder that is writeable for all users.

Sam Hasler