2009-10-26 18 views
7

Estoy tratando de instalar un conjunto de archivos dentro de la carpeta programdata usando el instalador básico de MSI. Como el contenido de los archivos es dinámico y se genera durante el proceso de instalación, estoy creando los archivos en código C# durante la instalación.MSI Installer file/folder permissions

Los archivos se crean en las carpetas apropiadas, y todo está bien, excepto los permisos de los archivos. Según tengo entendido, se supone que los archivos heredan sus permisos de la carpeta principal (si está habilitada), pero en este caso, esto no sucede. Los archivos que creo deberían poder escribirse para los usuarios normales, y no quiero establecer permisos explícitos para cada archivo creado. ¿El problema podría ser que el instalador se ejecuta con permisos diferentes y, por lo tanto, los archivos no heredan los permisos de sus carpetas principales?

Gracias de antemano por cualquier ayuda.

+0

Me parece extraño. ¿Revisaste los permisos después de la instalación? Es decir, ¿no solo son de solo lectura? –

+0

Sí. El problema es que una carpeta creada durante el instalador obtiene los permisos predeterminados para el administrador (o algo así). Establecí los permisos de la carpeta de forma manual, lo que permite a los usuarios habituales escribir. Pero los archivos creados en la carpeta no heredan los permisos establecidos manualmente en la carpeta (por supuesto, el archivo se crea en el instalador, que probablemente se ejecuta como administrador). Tal vez la solución es ajustar los permisos en los archivos de forma manual, sin embargo, no creo que sea un buen enfoque. – Kenneth

Respuesta

3

el instalador se ejecuta con acceso de administrador, lo que le permitiría cambiar cualquier cosa en los archivos de programa. Un usuario normal solo habría leído el acceso a la carpeta de archivos de programa y a la carpeta ProgramData/Common Application Data.

MSI lock permission table permite que un programa de instalación cambie el permiso de una carpeta después de crear en ProgramData/Common Application Data. Los proyectos de instalación de Visual Studio no admiten la tabla de permisos de bloqueo de MSI, por lo que si necesita que la carpeta que creó sea editable para usuarios normales en un proyecto de instalación, debe otorgar el derecho en una acción personalizada utilizando SetNamedSecurityInfo o modificar la base de datos MSI como una publicación construir paso También puede encontrar un software de autoría de MSI que pueda tratar con la tabla de permisos de bloqueo de MSI.

+0

Se trata de la carpeta ProgramData (Vista), un usuario normal debe tener acceso de lectura/escritura allí. –

+0

Common ProgramData se lee solo para usuarios normales, para otorgar R/W a todos los usuarios, el programa de instalación debe cambiar el permiso después de crear una subcarpeta. –

1

Si configura los permisos de la carpeta manualmente con una Acción personalizada y genera e instala los archivos con otra Acción personalizada, el problema podría deberse al orden de ejecución.

2

Tuve un problema muy similar y pude resolverlo usando el ejemplo here.

1

He tenido un problema similar aquí. El problema aquí es que msi estaba creando los archivos con el usuario SYSTEM. Y la aplicación durante el tiempo de ejecución usaba el usuario registrado (que no tenía permiso de escritura para este archivo). Lo que hice fue crear un archivo nuevo (si no existe) durante la inicialización de la aplicación con el creado por el instalador. Entonces este archivo tendrá el permiso de escritura. No es una buena práctica, pero resolvió mi problema.