Windows 7: ¿dónde y cómo puedo almacenar datos independientes del usuario de la máquina?

StackOverflow https://stackoverflow.com/questions/1806356

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación (32 bits c ++) que se ejecuta en XP y que necesito adaptar para ejecutar en Windows 7 y Vista. Necesita almacenar unas pocas docenas de bytes de datos en algún lugar independiente del Usuario. Bajo XP, almacené los datos en el registro bajo HKEY_LOCAL_MACHINE \ Software. Cuando ejecuto la aplicación en Windows 7, las entradas de registro se virtualizan y cada usuario obtiene una copia separada de los datos.

El registro no virtualizado parece un lugar lógico para los datos, pero no tengo idea de cómo hacerlo. Observo que hay una multitud de aplicaciones que realmente almacenan datos allí; ¿Cómo lo hacen?

También estoy dispuesto a almacenar los datos en otro lugar, ¿hay algún repositorio global bien conocido para ellos? Todo lo que necesito es un solo archivo pequeño.

Soy más o menos ignorante de todo el negocio de derechos / privilegios, por lo que cualquier sugerencia, punteros, etc., es muy apreciada.

¿Fue útil?

Solución

Uno de los objetivos de diseño de Windows 7 es aislar los datos y las aplicaciones del usuario. Esto es para mejorar la privacidad, seguridad y personalización. De hecho, los usuarios estándar en Win 7 no pueden cambiar los datos de otros usuarios.

Los System.Environment.SpecialFolder enumeration. Tenga en cuenta que no todas las carpetas son legibles o grabables por todos los usuarios. Por ejemplo, CommonApplicationData es legible para todos los usuarios, pero solo lo pueden escribir aquellos con una política adecuada, como Admins.

Si es absolutamente necesario que los datos se compartan entre los usuarios, un administrador o uno con permiso debe instalarlo en una ubicación compartida. Si los usuarios necesitan actualizar esta información, deben copiarla en una ubicación donde puedan escribir, como ApplicationData, y actualizar sus propias copias privadas. Esta copia privada no puede ser cambiada por otros usuarios. No debe instalar datos en ubicaciones compartidas a menos que su aplicación no funcione de otra manera.

De hecho, en Win7 debe instalar todas las aplicaciones y datos en las carpetas de datos y aplicaciones del usuario que ha iniciado sesión, no en ubicaciones compartidas. Si varios usuarios instalan la aplicación, cada usuario obtendrá su propia copia de la aplicación y los datos. Esto es casi siempre lo que quieres. Si varios usuarios ejecutan una aplicación o juego, no desea que un usuario cambie a todos los demás. Si varios usuarios realmente necesitan el mismo cambio, permita que cada usuario actualice su copia privada cuando la necesite. Si la cuenta de un usuario es pirateada o se vuelve mala, no desea que destruya las aplicaciones y los datos de todos los demás.

También tenga en cuenta que en Win7, los usuarios pueden iniciar sesión en una máquina de forma remota, por lo que no es una buena idea almacenar datos específicos de la máquina, como resoluciones de pantalla o direcciones IP, por usuario. En su lugar, verifique esto cada vez que se ejecute su aplicación.

Otros consejos

En mi humilde opinión, no es razonable pensar que muchas personas van a tener usuarios individuales que instalan sus propias copias de un paquete de software. De hecho, muchos paquetes no se instalarán a menos que se realicen bajo ADMIN (ALLUSERS = 1). Si no se proporcionan medios razonables para facilitar las instalaciones en todo el sistema con un nivel de protección inferior a ADMIN, las instalaciones a nivel de ADMIN seguirán siendo la norma.

Por ejemplo, ¿por qué no se permite que algunas instalaciones de usuarios no ADMIN (con privilegios intermedios) creen claves de registro en alguna parte restringida del registro (HKLM \ SOFTWARE \ paquete) y directorios en TODOS LOS USUARIOS \ DATOS DE APLICACIÓN \ paquete?

Decidí hacer un ADMIN requerido (ALLUSERS = 1) .msi y crear claves de registro con protección modificada.

Por lo tanto, en una situación en la que mi cliente tiene una estación de trabajo dedicada, nuestra aplicación (que deriva datos de un archivo INI antiguo y bueno que le enviaremos) nuestro mensaje a su personal de TI es que deberán instalarlo ¿Está en la misma máquina para cada usuario que tienen?

Necesitamos leer / escribir en (bajo Windows 7 / Vista): Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData) + @ " \ GoScan \ GoScan.ini "

pero como otros han descubierto que los permisos para un usuario típico no son suficientes para r + w. ¿Es un " aceptable " practique cambiar los permisos del directorio / archivo una vez que el instalador haya terminado o quizás durante la instalación (no estoy seguro de dónde hacerlo en el proyecto de instalación de VS 2008).

-Paul

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top