2008-09-22 26 views
31

Estoy intentando construir un instalador de Windows usando el sistema de instalación de Nullsoft que requiere la instalación de un administrador. El instalador crea un directorio "logs". Como los usuarios normales pueden ejecutar esta aplicación, los usuarios normales deben poder escribir en ese directorio. ¿Cómo especifico que todos los usuarios deberían tener permiso para tener acceso de escritura a ese directorio en el lenguaje de scripts de NSIS?¿Cómo se configuran los permisos de directorio en NSIS?

Admito que esto suena como una especie de mala idea, pero la aplicación es simplemente una aplicación interna utilizada por pocas personas en una red privada. Solo necesito guardar los archivos de registro para poder ver por qué la aplicación se rompe si pasa algo malo. Los usuarios no pueden hacerse administradores.

Respuesta

33

Utilice el complemento AccessControl y luego agregue esto a la secuencia de comandos, donde el directorio "logs" se encuentra en el directorio de instalación.

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

Eso le da acceso completo a la carpeta para todos los usuarios.

3

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

+2

+1 .. nadie entendió esto y por lo tanto no vota tristemente. – nawfal

2

¿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é?

+0

Quiero que otros usuarios puedan ver los registros también. Si están en el directorio APPDATA de los usuarios, entonces si el usuario 1 ejecuta la aplicación, solo el usuario 1 o un administrador pueden ver el archivo de registro. –

9

En lugar de cambiar los permisos en los directorios en Archivos de programa, ¿por qué no los coloca en una ubicación que todos los usuarios pueden escribir?

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

+1

Eche un vistazo a esta respuesta sobre cómo lograr esto en log4net: http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for-log4net/1889591#1889591 –

6

Es una cuestión de edad ahora, pero según lo sugerido por Sören APPDATA el directorio es una buena forma de hacer lo que quiere, el asunto es: ¡No tome APPDATA personal del usuario sino el directorio APPDATA "Todos los usuarios"! De esta forma cualquiera podrá acceder al archivo de registro ;-)

Además, leí en alguna parte que usar (BU) en el GrantOnFile no funciona bien con algunos sistemas (Win 7 x64 si recuerdo bien), tal vez debe 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)

Cuestiones relacionadas