在我的C#Winforms应用程序中,我有一个WebBrowser控件,我想在其中显示一个Word文档。我通过电话显示文件
webBrowser1.Navigate(myDocName)
。
这适用于通过Word 2003的文档。
对于Word 2007和2010,这导致Word在新创建的Word实例中打开文档,而不是在包含WebBrowser的Winform上打开文档。我能够通过在客户端计算机上添加以下注册表项来解决此问题(请注意,这也可以在Excel中完成 - 要写入的值为(int)0x80000A00
,并且类已\Excel.Sheet
到位\Word.Document
):
int wordFlagValue = (int)0x80000024;
Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.8", "BrowserFlags", wordFlagValue);
Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.12", "BrowserFlags", wordFlagValue);
注意:Common.SaveToRegistryLocalMachine()
只是在HKEY_LOCAL_MACHINE下编写注册表项的包装函数
问题是某些客户端现在安装了Word 2013,并且再次出现新的Word实例问题。我尝试添加以下注册表项(以反映Word的新版本),但无效:
Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.14", "BrowserFlags", wordFlagValue);
Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.15", "BrowserFlags", wordFlagValue);
有关如何解决此问题的任何想法?
答案 0 :(得分:3)
(免责声明:我在微软和Internet Explorer工作期间,我对此领域没有特别的了解)
我认为问题是因为Office 2013不再支持由Internet Explorer托管[需要引证!]。这是出于各种原因,但我认为,因为我们(作为公司)为OLE和COM所持有的愿景从未真正解决过,而且它通常会带来糟糕的用户体验(请记住尝试编辑嵌入式Excel电子表格调整大小后的Word文档?)。
我记得Office 2003确实支持由其他进程(例如Internet Explorer甚至Visual Studio 6.0)托管,但是自从Office 2007以来我认为他们默认禁用了该功能,你必须跳过篮球才能让它工作,然后他们在2013年完全禁用了它。我认为,不要把它作为权威信息!
如果我错了(我很可能会这样),问题可能是因为你有一个64位进程(例如x64 OS上的.NET中为AnyCPU
)但是32位安装的Office版本,你不能在同一个进程中混合使用32位和64位二进制文件,因此它可能会起作用,但在此失败是因为它是错误的ISA。