windows - registro - modificar regedit sin ser administrador
¿Cómo se configuran los permisos de directorio en NSIS? (6)
¿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é?
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?
Admito que esto suena como una especie de mala idea, pero la aplicación es solo 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.
Ahora es un problema viejo, pero como sugirió Sören, el directorio APPDATA 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, cualquier persona 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 debería 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 de Windows)
En lugar de cambiar los permisos en los directorios en Archivos de programa, ¿por qué no poner los registros en una ubicación que todos los usuarios puedan 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.
Use el complemento AccessControl y luego agréguelo al script, 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.
AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess"
no funcionó para mí en una máquina con Windows Server 2008. En cambio, 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