¿Cómo se establecen los permisos de directorio en NSIS?


Estoy tratando de construir un instalador de Windows utilizando el sistema de instalación de Nullsoft que requiere la instalación de un Administrador. El instalador crea un directorio "logs". Dado que los usuarios regulares pueden ejecutar esta aplicación, ese directorio debe ser escribible por usuarios regulares. ¿Cómo puedo especificar que todos los usuarios deben tener permiso para tener acceso de escritura a ese directorio en el lenguaje de script NSIS?

Admito que esto suena como una especie de mala idea, pero la aplicación es solo una aplicación interna utilizado por solo unas pocas personas en una red privada. Solo necesito los archivos de registro guardados para que pueda ver por qué la aplicación está rota si sucede algo malo. Los usuarios no se pueden hacer administradores.

Author: Jay R., 2008-09-22

6 answers

Use el complemento AccessControl y luego agregue esto al script, donde el directorio "logs" está en el directorio de instalación.

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

Que da acceso completo a la carpeta para todos los usuarios.

 33
Author: Jay R.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-22 19:47:19

AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess" no funcionó para mí en una máquina Windows Server 2008. En su lugar, tuve que usar este:

AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"

S-1-5-32-545 es equivalente a" Usuarios " según http://support.microsoft.com/default.aspx?scid=kb;EN-US; Q243330

 13
Author: user474708,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-13 16:01:41

En lugar de cambiar los permisos en los directorios bajo Archivos de programa, por qué no poner los registros en una ubicación que sea escribible por todos los usuarios.

Consulte la sección SetShellVarContext 4.9.7.7 en su documentación de NSIS. Puede usarlo con APP APPDATA para obtener la carpeta de datos de la aplicación que se puede escribir para todos los usuarios.

 9
Author: Sam Hasler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 19:07:04

Es un problema antiguo ahora, pero como sugiere Sören APPDATA directory es una buena manera de hacer lo que quieres, la cosa es : No tome APPDATA personal del usuario, pero el "Todos los usuarios" APPDATA dir! De esta manera cualquiera podrá acceder al archivo de registro; -)

Además, leí en alguna parte que usar (BU) en el GrantOnFile no está funcionando bien con algunos sistemas (Win 7 x64 si no recuerdo mal), tal vez deberías usar el SID "(S-1-5-32-545)" en su lugar (es el SID de todos los usuarios, este valor es una constante en cada sistema operativo Windows)

 6
Author: Mirhahil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-03 08:57:32

Una forma: llamar al shell, y usar cacls o xcacls.

 3
Author: Sören Kuklau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-22 19:21:05

¿Por qué no crear un directorio de registro en el directorio %APPDATA% del usuario? ¿Realmente necesita poner todos los registros en el directorio de instalación? ¿Por qué?

 2
Author: JesperE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-22 19:22:33