2

我正在使用 Visual Studio,C# 进行编码。如上所述,有什么方法可以打开存储在 Sharepoint 文档库中的 word 文件?只需要打开word文件让我阅读。不必编辑或删除。

我试过: System.Diagnostics.Process.Start("iexplore.exe",url) 但它似乎不起作用。

尝试了以下代码。显示我的标签没问题。但是 doc 这个词也不会启动。

protected void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = GridView1.Rows[index];
            this.Label1.Text = "You selected " + row.Cells[4].Text + ".";
            System.Diagnostics.Process.Start(@"C:\Users\Administrator\Desktop\Test\Test.docx");
        }  
    }
4

1 回答 1

2

这可能比听起来要困难得多。如果您尝试从服务器端对象模型执行此操作,那么您很可能会在会话 0 中运行。会话 0 是用于服务的特殊 Windows 会话,它不允许产生新进程。要解决这个问题,您必须使用 Windows API 让用户登录并控制他们的会话,从而退出会话 0。我不会在这条路上走得更远,因为您没有指定您实际上正在这样做。

如果您只是想下载存储在 SharePoint 文档库中的 Word 文档,然后在客户端启动它,您可以使用以下命令下载并打开该文档:

ClientContext clientContext = new ClientContext("http://SharePoint/");
string serverRelativeUrlOfFile = "SharedDocuments/file.docx";
string fileDestinationPath = @"C:\Documents\file.docx";

using (FileInformation sharePointFile =
    Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, serverRelativeUrlOfFile))
{
    using (Stream destFile = System.IO.File.OpenWrite(fileDestinationPath))
    {
        byte[] buffer = new byte[8 * 1024];
        int byteReadInLastRead;
        while ((byteReadInLastRead = sharePointFile.Stream.Read(buffer, 0, buffer.Length)) > 0)
        {
            destFile.Write(buffer, 0, byteReadInLastRead);
        }
    }
}


System.Diagnostics.Process.Start(@"C:\Documents\file.docx");

编辑:注意,这使用了 SharePoint2010 客户端对象模型,因为会话 0 隔离使服务器端对象模型的步骤变得相当困难,除非有要求,否则我不会在这里详细说明。

编辑:在评论之后,很明显您正在尝试使用 Webpart 在客户端下载和执行文件。上面的代码来自 SharePoint 2010 客户端对象模型,但是是 C# 版本。既然我已经向您展示了正确的 C# 版本,那么将其转换为 JavaScript 版本应该很容易。这会将文件下载到客户端。下载文件后,使用以下 JavaScript/ActiveX 执行文件:

 var objShell = new ActiveXObject("Shell.Application");
 var strArguments = "";
 var strDirectory = "";
 var strOperation = "open";
 var intShow = 1;
 objShell.ShellExecute(FileLocation, strArguments, strDirectory, strOperation, intShow);

替换正确参数的地方。请注意,这只能在 Internet Explorer 上工作——因为这个显然非常不安全的 ActiveX 部分被每个半体面的浏览器阻止了——而且我只在 IE8 上测试过它。

于 2013-03-24T17:58:27.853 回答