2009-07-28 13 views
15

Estoy usando la configuración inno para crear un paquete de instalación para mi aplicación, y mi aplicación está escrita por C# + .Net 2.0 + VSTS 2008. Inno setup =>http://www.jrsoftware.org/isinfo.php mi aplicación en Archivos de programa/carpeta Foo (Foo es el nombre de mi aplicación). Mi aplicación está orientada a Windows Vista.problema de permiso de escritura del archivo en la carpeta "Archivos de programa"

El problema que encontré es que mi programa no puede escribir en la carpeta Program Files/Foo. Y necesito el permiso de escribir en esta carpeta para guardar algunos archivos de configuración. Lo extraño que noto es que la carpeta Program Files/Foo está marcada como de solo lectura y he comprobado que todas las carpetas en Archivos de programa están marcadas con solo lectura, como Office.

Mis preguntas son,

  1. Por qué todas las carpetas se marcan como de sólo lectura en Archivos de programa? ¿Significa que no debemos escribir en carpetas de aplicaciones individuales en Archivos de programa? De lo contrario, ¿dónde deberíamos escribir la información en el disco como la última información de configuración seleccionada por el usuario de una aplicación individual?
  2. Si pudiéramos escribir en carpetas de aplicaciones individuales en Archivos de programa, ¿cuál es la solución? No quiero que mi aplicación se ejecute como administrador para resolver este problema, y ​​si hay una solución para escribir en esta carpeta, quiero solicitar un permiso mínimo si es posible.

Respuesta

14

Usted debe escribir los datos de configuración específicos del usuario a la carpeta de datos de aplicación para el usuario actual, utilizando el special folders enum y Enivronment.GetFolderPath.

+0

¿No se sugiere que escriba la carpeta de aplicación individual en Archivos de programa? ¿Alguna guía publicada? – George2

+1

Windows XP - Pautas para aplicaciones –

+0

Es un paseo. :-) Si es para Windows Vista, ¿alguna práctica recomendada o guía publicada que indique que debemos almacenar datos en AppData? – George2

6

Una solución común sería instalar archivos de configuración para los datos de aplicación de carpeta es decir, como sigue:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
+0

¿No se sugiere que escriba la carpeta de aplicación individual en Archivos de programa? ¿Alguna guía publicada? – George2

12

La mejor práctica es no almacenar datos de configuración en la carpeta Archivos de programa. En su lugar, almacene los datos de su aplicación en% AppData% \ YourApplicationName. Dependiendo de si se desea almacenar los datos de configuración por usuario o en una carpeta común compartida, utilice uno de los siguientes enumeraciones para obtener la ruta de la carpeta:

string userAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
string commonAppData = Envrionment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 

Por defecto, los usuarios de Vista No ejecutar programas como administradores y, por lo tanto, esos programas tienen solo acceso de lectura a las carpetas en "Archivos de programa". Los usuarios pueden cambiar este comportamiento al deshabilitar el UAC y usted podría pedirle a sus usuarios que lo hagan, pero en una configuración de oficina los usuarios pueden no tener esa opción. Es por eso que usa AppData en su lugar: las aplicaciones siempre pueden leer y escribir datos en la carpeta AppData.

Puede encontrar información sobre UAC en el sitio de Microsoft. Aunque esta página es bastante larga, es un punto de partida para entender el UAC: http://msdn.microsoft.com/en-us/library/bb530410.aspx

Cuestiones relacionadas