Файл не нашел исключение, брошенный для файла XML, возможно, вызвано Outlook
-
04-10-2019 - |
Вопрос
Я получаю файл, не нашел исключение, когда мое приложение называется 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 пользователь не имеет доступа к записи ко всем путям системы.