将凭据传递给Word Interop以在SharePoint中打开文档

将凭据传递给Word Interop以在SharePoint中打开文档,sharepoint,sharepoint-2010,webdav,credentials,office-interop,Sharepoint,Sharepoint 2010,Webdav,Credentials,Office Interop,处理WPF应用程序(C#4.0) 系统在SharePoint中存储大量Word文档。Word可以直接编辑这些文档,因为SharePoint通过WebDAV向Office公开文档库 为了启动Word编辑这些文档,我们的WPF应用程序使用Microsoft.Office.Interop.Word 发现(通过简单的尝试)使用Interop.Word打开本地文档与通过WebDAV从SharePoint打开文档的唯一区别在于,您传递的ref对象文件名是URL而不是本地路径字符串 这一切都很有效: var

处理WPF应用程序(C#4.0)

系统在SharePoint中存储大量Word文档。Word可以直接编辑这些文档,因为SharePoint通过WebDAV向Office公开文档库

为了启动Word编辑这些文档,我们的WPF应用程序使用Microsoft.Office.Interop.Word

发现(通过简单的尝试)使用Interop.Word打开本地文档与通过WebDAV从SharePoint打开文档的唯一区别在于,您传递的ref对象文件名是URL而不是本地路径字符串

这一切都很有效:

var wordApplication = 
    new Microsoft.Office.Interop.Word.Application { Visible = true };

object filePath = 
    "http://PathToSharepoint.com/DocumentLibrary/DocumentName.doc";

object missing = Missing.Value;
object readOnly = false;
object isVisible = true;

Document reportDoc = wordApplication.Documents.Open(
    ref filePath,
    ref missing,
    readOnly,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref isVisible);

reportDoc.Activate();
但是,如果运行应用程序的Windows用户不是具有文档库权限的域用户,Word最多会提示他们输入用户名和密码,最坏的情况下,有时会抛出COMException

用户已经使用他们需要提供的相同凭据登录到我们的WPF应用程序,并且我们在内存中有用户名和安全密码。然而,我看不到任何明显的方式,你如何向Word提供这些凭证


有人知道我如何提供类似于NetworkCredential的信息吗?

您是否尝试以您拥有用户名和密码的用户身份执行模拟代码?在网络上有很多这样做的例子,例如。我现在自己无法测试它,但它应该可以工作…

假设您使用的是windows 8.1。Office使用的凭据存储在Windows凭据管理器中。通过进入开始>搜索“凭据管理器”>然后单击Windows凭据来访问此项

凭证应类似于以下内容:

MicrosoftOffice15_Data:orgid:<emailadress>
然后,当您使用Word打开文档时,它会在不提示您输入凭据的情况下打开文档


使用Office 2013和Windows 8.1在SharePoint Online上进行测试。

这确实是个好主意,但在这种情况下不起作用。问题是,运行应用程序的工作站不是运行SharePoint server的域的成员,因此这些工作站的邮箱上的Windows登录无效:(
var cm = new Credential { Target = "MicrosoftOffice15_Data:orgid:youremailhere@email.com", PersistanceType = PersistanceType.LocalComputer, Password = "yourverysecurepasswordhere" };
cm.Save();