En mi trabajo reciente, quiero crear una pequeña herramienta para recordatorios a clientes; Naturalmente, el programa winform debe leer el archivo de configuración del mismo directorio que la aplicación (no el archivo exe.config);
Para leer el directorio donde está la aplicación actual, inmediatamente pensé en System.Environment.CurrentDirectory para obtener el directorio de trabajo actual. El programa parece funcionar a la perfección;
Cuando llegué al trabajo a la mañana siguiente, apareció: "Leer archivo de configuración perdido". La app añade arranque automático de arranque. Este mensaje aparece para leer el fallo del archivo de configuración y comprobar inmediatamente si el archivo de configuración en el directorio de la aplicación ha sido eliminado por sí solo. Tras comprobarlo, vi que el archivo seguía ahí, y salí del programa y lo ejecuté de nuevo
Sigue bien, no falta ningún perfil de lectura emergente. ¿Luego ver si la ruta de la entrada de arranque en el registro no está en mi directorio? Mirando el archivo de ruta, está bien. ¿Un poco confundido? Cierra sesión del ordenador e intento reiniciar, sigue apareciendo el archivo de configuración. La razón por la que no se puede encontrar el camino se tomará directamente
MessageBox, el programa se ejecuta y descubre que el camino es efectivamente este camino.
Añade el código MessageBox y sigue arrancando la prueba. Cuando lo inicié, vi que el directorio actual que aparecía era C:\Windows\System32, y al instante me quedé desconcertado. Pensé, ¿podría ser que el programa de Lao Tzu llegara hasta system32? Revisando el registro y sysetm32 no tiene mi app. Por último, pensé que debería haber un problema con el código para obtener la ruta.
Tras repetidas pruebas, se descubrió que System.Environment.CurrentDirectory es efectivamente para obtener el directorio actual, pero si el programa A llama al programa B y el programa B utiliza System.Environment.CurrentDirectory para obtener el directorio. Entonces, el directorio obtenido en el programa B ya no es el directorio donde se encuentra la aplicación B; Se convierte en el directorio donde se encuentra A. No es difícil encontrar que el directorio que aparece al arrancar es C:\Windows\System32 porque el programa de arranque auto-arrancado también es llamado por un proceso en Windows.
Por lo tanto, si el programa winform quiere obtener el directorio donde se encuentra la aplicación actual, es mejor no usar System.Environment.CurrentDirectory. En cambio, es: Application.StartupPath Así no importa quién lo llame.
Código de prueba:
Transferido desde:El inicio de sesión del hipervínculo es visible.
|