使用WPF应用程序(C# 4.0)。
系统在SharePoint中存储了许多Word文档。Word可以直接编辑这些文档,因为SharePoint通过WebDAV向Office公开文档库。
为了启动Word来编辑这些文档,我们的WPF应用程序使用Microsoft.Office.Interop.Word。
我发现(通过简单的尝试),使用Interop.Word打开本地文档与通过WebDAV从SharePoint打开文档之间的唯一区别是,您传递的引用对象FileName是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应用程序,并且我们在内存中有用户名和securePassword。但是,我看不到任何明显的方法来向Word提供这些凭据。
谁知道我怎么才能提供类似于NetworkCredential的东西呢?
发布于 2011-03-04 03:33:43
您是否尝试执行被模拟为您拥有其用户名和密码的用户的代码?在网络上有很多这样做的例子,比如http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx。我现在不能亲自测试它,但它应该可以工作...
发布于 2015-07-28 16:59:51
假设你使用的是windows8.1。Office使用的凭据存储在Windows凭据管理器中。进入开始>搜索“凭证管理器”>然后点击Windows凭证。
凭据应如下所示:
MicrosoftOffice15_Data:orgid:<emailadress>使用此http://credentialmanagement.codeplex.com接口,您可以使用以下命令在Windows凭据存储中自己存储凭据:
var cm = new Credential { Target = "MicrosoftOffice15_Data:orgid:youremailhere@email.com", PersistanceType = PersistanceType.LocalComputer, Password = "yourverysecurepasswordhere" };
cm.Save();然后,当您使用Word打开文档时,它会在不提示您输入凭据的情况下打开文档。
使用Office2013和Windows8.1在SharePoint Online上进行了测试。
https://stackoverflow.com/questions/5175395
复制相似问题