首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么安装Office 2013会在使用MAPI之后破坏WinForms RichTextBox?

为什么安装Office 2013会在使用MAPI之后破坏WinForms RichTextBox?
EN

Stack Overflow用户
提问于 2013-06-26 23:46:39
回答 1查看 1.7K关注 0票数 4

我有三个节目-

程序1:另外使用MAPI的Microsoft外接程序.

程序2:不使用的独立执行程序使用MAPI

程序3:做的独立的使用MAPI.

这三个程序都是用C#编写的,并在某个时候使用了WinForms RichTextBox。

在安装Office 365程序的x64 Windows 8上,程序'1‘和'3’没有问题,但是程序'2‘一旦用以下堆栈构造RichTextBox控件就会崩溃:

代码语言:javascript
复制
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()显示它在'riched20.dll‘上调用LoadLibrary,然后在加载模块上调用GetModuleFileName。

对于程序2,Visual告诉我它已经从路径"C:\Program \Microsoft 15\root\vfs\ProgramFilesCommonX86 86\Microsoft Shared\OFFICE15\ riched20.dll“中加载riched20.dll。

然后,对FileVersionInfo.GetVersionInfo()的调用失败,因为给定的路径不存在。

但是,程序1( outlook-addin)也从相同的路径加载了riched20.dll --但不知怎么的,它还是成功了!

没有加载MAPI的程序2运行良好,它从C:\Windows\syswow62加载riched20.dll

程序3在创建富文本框之前初始化MAPI,我知道某些MAPI函数会将当前的工作目录更改为MAPI目录。这可能解释了为什么程序3加载office的riched20.dll,而程序2加载system32副本。

我怀疑程序1工作与程序3失败的不同之处在于,路径中的vfs代表“虚拟文件系统”,因此作为Outlook外接程序运行的程序1可以使用不存在的路径找到riched20.dll。

这三个程序都与以前版本的office一起工作。

作为一种解决方案,在初始化MAPI之前自己调用‘LoadLibrary(“riced20.dll”)会使问题消失,但感觉就像一次可怕的攻击。

我也找不到关于这个'vfs‘文件路径的任何信息,以及它在互联网上的含义。

对于我自己的教育,还有人能更好地解释这里发生了什么吗?

更新:到目前为止,我已经知道这与“单击到运行”功能有关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-26 06:00:12

解决方案是在初始化MAPI之前使用pinvoke在“riced20.dll”上调用LoadLibrary。

代码语言:javascript
复制
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern IntPtr LoadLibrary(string lpFileName);

LoadLibrary("riched20");
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17332284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档