2010-01-04 9 views
8

que tienen una aplicación escrita en Delphi 2006 que estaba trabajando bien en Windows XP. Empaqueté la aplicación usando Inno Setup, usando Archivos de programa como la carpeta predeterminada. Algunos usuarios migraron a Windows Vista y Windows 7. El problema aquí es que la aplicación crea algunos archivos dentro de su carpeta de instalación por sí misma. Esto funcionaba en XP pero en Windows Vista los usuarios tenían problemas con los archivos creados (no aparecen, etc.). Después de investigar los informes de los usuarios, descubrí KB 927387: "Problemas comunes de virtualización de archivos y registros en Windows Vista o en Windows 7".¿Cómo hago que mi programa funcione en Windows Vista y Windows 7?

Ejecución de la aplicación con derechos de administrador solo resuelve el problema, pero que es (creo) una solución horrible. Me gustaría saber si hay directivas o consejos para hacer que la aplicación sea compatible con Vista y 7, ya que más usuarios migrarán a estos sistemas operativos pronto.

+0

¿Qué harías en Windows XP cuando el usuario es un usuario estándar? –

Respuesta

12

para Vista/Win7, su aplicación no puede poner los archivos en la carpeta Archivos de programa/Programas a menos UAC está apagado o la aplicación se está ejecutando como elevada. Tenga en cuenta que "elevado" no significa necesariamente "iniciar sesión como administrador". Los usuarios que no son administradores pueden elevar y el Administrador no es necesariamente elevado.

Si la aplicación intenta escribir en Archivos de programa pero no es elevada, el sistema operativo bloqueará la aplicación o "virtualizará" la escritura (coloque los archivos en otro lugar), dependiendo de cómo esté configurado el UAC. Ninguno de los dos ayuda a la aplicación a tener éxito en lo que intentaba hacer.

por lo que necesita para ponerlos en otro lugar. Donde depende de por qué se están creando los archivos, y no nos lo ha dicho. Puede leer this article para conocer las opciones. Tenga en cuenta que, además de las carpetas AppData y Roaming del usuario, también hay un perfil "Todos los usuarios" (compartido).

Usted probablemente debería mirar en this article and screencast, que discute UAC en profundidad desde un punto de vista Delphi.

13

Usted necesidad de volver a escribir una aplicación para almacenar sus archivos en los lugares adecuados, incluso en XP, pero especialmente en Vista en adelante, sobre todo si UAC está habilitado. Esto se está volviendo cada vez más importante para hacer las cosas bien, ya que Microsoft sigue bloqueando y aplicando sus modelos de seguridad con cada nueva versión del sistema operativo. Las reglas para la forma de gestionar adecuadamente los archivos de aplicaciones y relacionados con el usuario está documentado en MSDN, por ejemplo: "Application Specification for Microsoft Windows 2000 for Desktop Applications, Chapter 4: Data and Settings Management" y "Application Specification for Microsoft Windows 2000 for Desktop Applications Appendix A: Best Practices" (sí, ellos son viejos, pero son todavía muy relevante). Mira SHGetSpecialFolderLocation(), SHGetFolderPath(), SHGetKnownFolderPath() y otras funciones relacionadas para ayudarle.

4

Los archivos que cree para el uso de su aplicación que no sea el tiempo de instalación deben ir al directorio ProgramData si es global a la estación de trabajo, o al directorio ApplicationData de los usuarios si es específico para el usuario.

Para los casos en que es absolutamente necesario colocar un archivo en el directorio de archivos de programa, puede utilizar com para solicitar la elevación. This is discussed in great detail y delphi specific bits are also available. Un ejemplo que he usado es el parcheo de la base de instalación de mis usuarios. El UAC les advierte que el sistema necesita realizar cambios, por lo que si lo hace como una tarea automatizada, es posible que deba replantearse la lógica para que sea más útil para el usuario.

2

tuve una investigación similares here (desbordamiento de pila).

Al final me di cuenta de que necesitaba poner mi aplicación en Archivos de programa en el momento de la instalación (requiriendo UAC/elevación) y luego almacenar los datos de mi aplicación en la carpeta de datos de la aplicación del usuario. Tuve que cambiar la forma en que mi programa generaba la configuración de configuración 'predeterminada' y también donde estaba guardando esto, pero al final valió la pena el esfuerzo: terminamos con algo que se instala y funciona bien en XP, Vista y Windows 7

El único golpe de UAC que obtenemos es en el momento de la instalación, lo que tiene sentido para mí (y también recibe un golpe similar en el tiempo de instalación en la Mac). No teníamos ningún dato que fuera común a todos los usuarios en este caso particular, pero habría revisado la carpeta especial Datos de programa si ese hubiera sido el caso.

El software de instalación que utilizamos (Setup Factory) lo hizo bastante sencillo (simplemente escribimos un pequeño código para detectar XP frente a Vista/Win7 y elegimos la carpeta especial adecuada). Sería fácil hacer esto también en Inno Setup, por la experiencia limitada que tengo de él.

Cuestiones relacionadas