2010-12-19 18 views
6

Sé que commonappdata (Todos los usuarios) puede contener configuraciones de aplicación para todo el sistema, pero en Vista/7 los usuarios no elevados no pueden escribir en ese directorio.¿Hay una carpeta compartida en Windows a la que los usuarios no elevados tienen acceso de escritura?

¿Hay una carpeta compartida entre los usuarios y cualquier usuario que no sea administrador puede escribir en ella?

Por eso necesito esto: Mi aplicación está instalada en el directorio PF por un instalador Inno Setup con derechos elevados. Luego, cuando el usuario real no administrador ejecuta el programa, copia su configuración en el directorio AppData del usuario utilizando otro instalador Inno Setup no elevado. Al desinstalar el programa (iniciado por el instalador de todo el sistema con derechos de administrador) quiero desinstalar los archivos del programa del directorio AppData de cada usuario.

me ocurren dos soluciones: 1. Obtener una lista de usuarios de Windows y iteración a través de sus directorios AppData (parece demasiado complicado) 2. El almacenamiento de las rutas de acceso a los programas de desinstalación en el mencionado directorio de datos de usuario común.

¿Alguna idea?

Gracias!

Respuesta

0

La solución 1 parece bastante razonable para mí. Entonces, cada usuario controla su instalación y solo la suya, y usted controla la instalación central compartida.

Para la solución 2, puede crear una carpeta de escritura permitida en una ubicación bien definida para que su instalador la conozca o utilizar una clave de registro para el mismo fin. Pero tenga en cuenta que esto puede crear un agujero de seguridad porque cualquiera podría manipular las rutas de desinstalación de otros usuarios.

+0

Pero, ¿cómo hago para darme cuenta de la solución 2? ¿Dónde hay una ruta en Windows que es independiente de los directorios de userappdata y los usuarios normales no elevados tienen acceso de escritura a ella? – Steve

+0

Su instalador que se ejecuta con privilegios de administrador puede _crear_ dicha carpeta, tiene suficientes derechos para hacerlo. Probablemente esta debe ser una subcarpeta en algún lugar dentro de la carpeta de instalación común (ejecutada por el administrador). – 9000

+0

¿Podría indicarme dónde pueden explicar cómo hacerlo en la práctica? Supongo que incluso si hago esto, el instalador tendrá que iterar a través de todas las cuentas de usuario y otorgarles permiso uno por uno. :-) – Steve

1

¿Las cosas en C: \ Users \ Public \ calificarían para lo que necesita?

"Documentos compartidos"
+1

¿No está disponible solo en Vista y más arriba? ¡Necesito una solución para XP también! – Steve

+0

@Steve: Creo que XP tiene una carpeta de Documentos compartidos en Mi PC, no estoy seguro de cuál es la ruta completa. Está diseñado para el acceso local multiusuario. –

4

Directory en Windows XP

C:\Documents and Settings\All Users\Documents 

O

%ALLUSERSPROFILE%\Documents 

directorio correspondiente en Vista/7

C:\Users\Public 

O

%PUBLIC%\Documents 

Pero lo que realmente está buscando, es el valor KNOWNFOLDERID de FOLDERID_PublicDocuments (legacy CSIDL_COMMON_DOCUMENTS). La función SHGetFolderPath puede guiarte.

o una alternativa más fácil VBScript, pero no estoy seguro de cómo esto es fiable a través de versiones del sistema operativo:

Const CSIDL_COMMON_DOCUMENTS = &h2e 
Set oShell = CreateObject("Shell.Application") 
Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path 

creo NameSpace no acepta que en particular constant. Por lo tanto, es posible que pueda tomar COMMONAPPDATA = &H23 y luego usar su elemento primario.Pero eso no es muy limpio o internacionalizado:

Wscript.Echo oShell.NameSpace(&h23).ParentFolder.Self.Path & "\Documents" 

pero dado que está utilizando Inno Setup, que realmente debería estar usando el {} commondocs Shell Folder Constant y hacer más fácil para usted mismo.

1

El usuario propietario de la carpeta de documentos. Excepto los archivos que se copiarán, moverán, eliminarán o editarán con otro programa si coloca algo ahí, debido a la visibilidad para el usuario.

Le sugiero que cree una carpeta con los datos de la aplicación común (CSIDL_COMMON_APPDATA o FOLDERID_ProgramData) en su instalador con un descriptor de seguridad que permita el acceso de todos.

E.g.

[Dirs] 
Name: "{commonappdata}\productname";Permissions:everyone-modify; 
Cuestiones relacionadas