Файл не нашел исключение, брошенный для файла XML, возможно, вызвано Outlook

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

Вопрос

Я получаю файл, не нашел исключение, когда мое приложение называется Outlook. Это называется, когда электронное письмо сохраняется к компьютеру, приложение вызывается и выполняет действие в сохраненном сообщении.

Мое приложение использует файл XML для хранения настраиваемых настроек, но этот файл не может быть найден, когда вызовы Outlook для выполнения приложения. Если я запуску программы вручную, она работает нормально.

Интересно, что исключение в том, что это:

System.io.fileNotfoundException: не удалось найти файл «C: Program Files Common Files System msmapi 1033 parttyOpedoped.xml».

Почему Outlook считает, что файл здесь? Это не путь для файла, но я уверен, что связан с Outlook. То, как я ссылаюсь на путь в коде, просто:

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

С файлом, находящимся в той же папке, что и .exe. Я не хочу сложным кодировать полный путь для файлов XML.

Любая помощь будет очень ценится.

Спасибо, Росс.

Это было полезно?

Решение

Из указанного кода я бы предположил, что требуется текущий путь в качестве местоположения для поиска файла. Текущий путь немного непредсказуемый, поскольку определенные операции влияют его значение, и значение сохраняется на каждом вызове. Т.е. когда другая часть вашего приложения или даже другая подпись, устанавливает текущий путь, это значение используется в следующий раз. Чтобы установить текущий путь, он должен использовать общее диалоговое окно для просмотра определенного файла.

В вашем случае я попробую либо

  • Укажите путь явно, выводя его из одного из хорошо известных папок (например, путь приложения пользователя - ищите Environment.GetFolderPath а также Environment.SpecialFolder)

или

  • Чтобы разрешить путь относительно пути сборки вашей DLL.

Чтобы найти путь сборки для myType Вы можете использовать следующий код:

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

В любом случае необходимо учитывать, что в более новых операционных системах Windows пользователь не имеет доступа к записи ко всем путям системы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top