2009-03-16 18 views
5

Tengo un proyecto que se lee en un archivo basado en un valor en una clase de configuración C#. Sin embargo, este valor cambia de una máquina a otra y, en vez de preguntarle al usuario la primera vez que se ejecuta el programa como si fuera un entorno corporativo, prefiero que se establezca en el instalador, pero ¿dónde se encuentra el archivo? ¿Hay un método más fácil?C# Configuración ubicación del archivo xml

Esto no es un complemento de Visual Studio un programa independiente

+0

Podría estar equivocado, pero creo que debe proporcionar más información. – inspite

+0

¿Qué es la "clase de configuración de C#"? Ese término es muy ambiguo. Por favor aclara tu pregunta. – Cerebrus

+0

Creo que es my.settings? – Shoban

Respuesta

3

De su publicación, parece que tiene una aplicación de Windows? , puede almacenar un valor inicial en la configuración de la aplicación, puede crear un instalador en Visual Studio y escribir acciones personalizadas que pueden escribir valores en el archivo en la primera instalación en el proyecto de instalación.

+0

no hay un 'predeterminado' normal, bien, hay 3 dependiendo de dónde se encuentre, ¿cómo escribiría acciones personalizadas durante la instalación? –

+0

http://www.codeproject.com/KB/install/SetupAndDeployment.aspx – abmv

0

del registro o un archivo INI o un archivo XML lo que más le convenga.

+0

Por lo que sé, ES un archivo xml guardado en una carpeta del sistema, pero no estoy seguro de dónde está almacenado. –

0

La mejor opción sería el registro. Instalar la aplicación requerirá acceso de administrador, por lo que escribir en el registro durante la instalación no será un problema.

Más sobre si alguien accidentalmente elimina el archivo ini o settings entonces el programa podría dejar de funcionar.

+0

no es probable que se elimine el archivo de configuración, pero si las configuraciones se escriben de manera irreparable, aparecerá un cuadro de diálogo preguntando al usuario final por la ruta, pero dado que no es un caso deseable de UI, es un medio de seguridad y no preparar. –

1

Creo que está hablando de la configuración generada por el diseñador (el archivo .settings)?

La ruta exacta generalmente contiene algún tipo de Hash (consulte el enlace this). Normalmente tengo mi propia clase de configuración a la que serializo y desde xml usando , lo que me da más libertad (creo que los archivos de configuración de C# no te permiten agregar enumeraciones personalizadas, por ejemplo, o hacen que sea un poco más difícil de hacer más que simplemente agregarlos al archivo .settings).

Sin embargo, tal vez no haya necesidad de establecer valores durante la instalación? Por ejemplo, puede agregar una configuración de FirstStartup (establecida inicialmente en true), que puede leer cuando su aplicación se inicie por primera vez y luego configurarla en false. De esta forma, puede establecer su configuración predeterminada cuando detecta un "primer inicio".

+0

De hecho, es ese tipo de configuración, sin embargo, ya tengo un tipo de diálogo de "primera inicialización", sin embargo, la persona más probable para ejecutar este diálogo es el usuario final, y no la persona que lo configura, de ahí el objetivo de esta pregunta. –

+0

Entendido. No me di cuenta de que la interacción del administrador también es necesaria. En ese caso, tal vez puedas intentar implementar un Proveedor de Configuraciones personalizado. Pero recuerdo que ya tuve estos problemas y decidí que sería más fácil hacer una clase Singleton simple con los métodos Cargar/Guardar. – Groo

1

Seguramente necesitará algún tipo de acción personalizada al final de su instalador. No ha mencionado qué tecnología está utilizando para implementar su aplicación, por lo que me abstendré de proporcionarle alguna orientación específica.

Recomiendo configurar el valor en su App.config. Este es un archivo xml que se llamará MyApplication.exe.config en el mismo directorio que su aplicación. Agréguelo a su instalador si aún no está allí. En su instalador, añadir un nuevo ajuste:

<configuration> 
    <appSettings> 
    <add key="MySetting" value="My Value"/> 
    </appSettings> 
</configuration> 

En su código, recuperar el ajuste:

String setting = ConfigurationSettings.AppSettings["MySetting"]; 

Si esto es un ajuste de todo el equipo, este instalador es el lugar adecuado para establecer esto. Si lo hace en la primera ejecución, se encontrará con una serie de problemas con los permisos en los archivos y directorios, si la primera persona que ejecuta la aplicación es un usuario con permisos limitados.

+0

Pero este valor no es estático, y el valor necesario cambia por red, y hay más de una red para implementar. –

+0

http://www.codeproject.com/KB/install/SetupAndDeployment.aspx –

-2

Mi caso es diferente, mi proyecto es una biblioteca de clases (dll) que tiene el archivo app.config. Decidí crear 4 variables de configuración de aplicaciones (título, URL, límite, velocidad). Para crear esto, hago clic derecho sobre el proyecto -> Propiedades -> Configuraciones. estos valores se pueden recuperar en código usando este comando -> Settings.Default.title, ...etc

el problema es que puedo decir que instanciar 5 objetos (mismo objeto por ejemplo MyProject.MyClass) de esta biblioteca, quiero que la instancia pueda tener su propia configuración. Quiero decir que cada una de las instancias puede tener su archivo de configuración xml. ¿Se puede hacer esto?

2

El archivo de configuración es la manera más fácil de hacer lo que está pidiendo, sin embargo, NO es el mejor. De hecho, se recomienda no utilizar archivos .config para tales casos.

  • cada vez que los usuarios instalan una 'actualización', existe el riesgo de sobrescribir sus cambios existentes.

  • algunas empresas pueden tener restricciones de política en los archivos .config.

  • el usuario no puede mover fácilmente su configuración de una PC a otra.

Desde mi propia experiencia, el uso de XML, MS-Access, del registro o archivos de texto a la configuración del usuario Store ha demostrado ser más útiles que el uso de los archivos .config.

0

Dijiste que esto es para un entorno corporativo. Puede crear una plantilla administrativa para la política de grupo para establecer el valor predeterminado en el registro. Entonces, su programa puede consultar ese único valor de registro si el valor predeterminado no se ha establecido todavía.

0

Para responder a la "¿Dónde está el archivo situado" poco de la pregunta original para los interesados (Supongo que el "archivo de configuración" en cuestión es el elemento "Archivo de configuración" disponible en el diálogo "Agregar nuevo elemento").

En Win7 (y probablemente todos los demás) el archivo de configuración generará en la ruta:

C: \ Users \ [usuario] \ Datos de programa \ estructura

la carpeta local de aquí en adelante depende de su AssemblyInfo y la información de compilación, el campo "AssemblyCompany" (si está ocupado) se usa para la carpeta superior, debajo de esta hay una carpeta que copia el nombre ejecutable de la aplicación y luego la compilación. archivo (llamado "* .config").

En mi caso, la ruta completa es la siguiente:

C: \ Users \ [usuario] \ AppData \ Local \ [company_name] \ Application.exe_StrongName_zx0v1qxyoass4d0z3mtwe3vbrhaehkjg \ 0.0.5812.21662 \ user.config

Cuestiones relacionadas