У меня есть три программы -Почему установка Office 2013 сменила WinForms RichTextBox после использования MAPI?
Программа 1: надстройка Microsoft Outlook, которая дополнительно использует MAPI.
Программа 2: Автономный ех, что не сделать любое использование MAPI
Программа 3: Автономный ех, что делает грим использования MAPI.
Все три программы написаны на C# и в какой-то момент используют WinForms RichTextBox.
На 8 установки x64 Windows, с Office 365 программы «1» и «3» не имеют никаких проблем, но программа «2» падает, как только управление RichTextBox строится с помощью следующего пакета:
System.IO.FileNotFoundException : C:\Program Files (x86)\Common Files\Microsoft Shared\Office15\riched20.dll
at System.Diagnostics.FileVersionInfo.GetVersionInfo(String fileName)
at System.Windows.Forms.RichTextBox.get_CreateParams()
at System.Windows.Forms.Control..ctor(Boolean autoInstallSyncContext)
at System.Windows.Forms.TextBoxBase..ctor()
at System.Windows.Forms.RichTextBox..ctor()
<snip>
Демонтаж RichTextBox.get_CreateParams() показывает, что он вызывает LoadLibrary на 'riched20.dll', а затем GetModuleFileName в загруженном модуле.
Для программы 2 Visual Studio сообщает мне, что она загрузила файл riched20.dll из пути «C: \ Program Files \ Microsoft Office 15 \ root \ vfs \ ProgramFilesCommonX86 \ Microsoft Shared \ OFFICE15 \ RICHED20.DLL".
После этого вызов FileVersionInfo.GetVersionInfo() завершился неудачно, поскольку путь, который он задал, не существует.
Однако - программа 1 (Outlook-addin) также загрузила файл riched20.dll с одного и того же пути - и все же так или иначе это удается!
Программа 2, которая не загружается интерфейс MAPI работает отлично, и он загружает riched20.dll из C: \ Windows \ syswow62
Программа 3 инициализирует интерфейс MAPI, прежде чем он создает богатое текстовое поле, и я знаю, что некоторые функции MAPI изменит ваш текущий рабочий каталог в каталог MAPI. Вероятно, это объясняет, почему программа 3 загружает файл riched20.dll и программу 2, загружая копию system32.
Я подозреваю, что разница между работой программы 1 и ошибкой программы 3 заключается в том, что vfs в пути означает «виртуальная файловая система», и поэтому программа 1, работающая в качестве дополнения Outlook, может каким-то образом найти файл riched20.dll, используя путь, который на самом деле не существует.
Все три программы работают с предыдущими версиями офиса.
Как правило, вызов «LoadLibrary (« riched20.dll ») перед инициализацией MAPI устраняет проблему, но чувствует себя как ужасный хак.
Я также не нашел никакой информации об этом пути «vfs» и о том, что он означает в Интернете.
Для моего собственного образования кто-нибудь может лучше объяснить, что здесь происходит?
Обновление: У меня есть все, что нужно для разработки, это как-то связано с функцией «нажимать-работать».
Да, путь соответствует установочной установке Outlook 2013 для запуска. Можете ли вы загрузить правильную dll раньше времени, чтобы убедиться, что она загружена к моменту загрузки и инициализации MAPI? –
Да, я могу ... (Лучше поздно, чем никогда!) – sger6218