Archivo no encontrado excepción lanzada para el archivo XML, posiblemente causada por Outlook

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

Pregunta

Me estoy poniendo excepción de un archivo no encontrado cuando mi aplicación se llama por Outlook. Se llama cuando un correo electrónico se guarda en el ordenador la aplicación se llama y realiza una acción sobre el mensaje guardado.

Mi aplicación utiliza un archivo XML para almacenar los ajustes configurables, pero este archivo no se puede encontrar cuando Outlook llama a ejecuta la aplicación. Si ejecuto el programa manualmente entonces funciona bien.

Lo interesante de la excepción es la siguiente:

System.IO.FileNotFoundException: No se pudo encontrar el archivo 'C: \ Archivos de programa \ Archivos comunes \ System \ MSMAPI \ 1033 \ settingsOpened.xml'.

¿Por qué piensa que el archivo de Outlook es aquí? Este no es el camino para el archivo, pero estoy seguro de que está relacionado con Outlook. La forma en que estoy haciendo referencia a la ruta de acceso en el código es simplemente:

XmlDocument xDoc = new XmlDocument();
xDoc.Load("settingsOpened.xml");

Con el archivo de estar en la misma carpeta que el archivo .exe. No quiero a codificar la ruta completa de los archivos XML bien.

Cualquier ayuda sería muy apreciada.

Gracias, Ross

¿Fue útil?

Solución

Desde el código mostrado que supongo que toma la ruta actual como la ubicación para buscar el archivo. La trayectoria de la corriente es un poco impredecible como ciertas operaciones de efectuar su valor y el valor se conserva en cada llamada. Es decir. cuando otra parte de su aplicación, o incluso otro applciation, establece la ruta actual de este valor se utiliza en la próxima ocasión. Para establecer la ruta actual, es suficiente como para utilizar un diálogo común para buscar un determinado archivo.

En el caso de que iba a tratar ya sea a

  • especificar la ruta explícitamente por lo deriva de una de las carpetas conocidas (por ejemplo, ruta aplicación del usuario - look para Environment.GetFolderPath y Environment.SpecialFolder)

o

  • para resolver la ruta relativa a la ruta de montaje de DLL.

Para encontrar la ruta de montaje para myType puede utilizar el siguiente código:

String strPath = System.IO.Path.GetDirectoryName(typeof(myType).Assembly.CodeBase);

En cualquier caso, usted debe tener en cuenta que en las ventanas de los sistemas operativos más nuevos que el usuario no tiene acceso de escritura a todos los caminos de la unidad del sistema.

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