我开发了一个asp.net,c#应用程序。在那个应用程序中,我有一个像open excel文件这样的任务,我在开发visual studio时完成了任务,在本地工作正常。
但是当我将我的应用程序托管到IIS服务器时,单击“读取”按钮时它没有响应。
我的IIS版本 - 7.5.7600
Asp.Net代码:
<asp:TemplateField HeaderText="Read">
<ItemTemplate>
<asp:LinkButton runat="server" ID="lnkKpiName" Text='✉ Read' CommandName="View" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CssClass="label" ForeColor="Green"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
C#代码:
if (e.CommandName == "View")
{
LinkButton lnkBtn = new LinkButton();
lnkBtn.Attributes.Add("target", "_blank");
int index = Convert.ToInt32(e.CommandArgument);
string FileName = ((Label)gvwUserManual.Rows[index].FindControl("lblFileName")).Text;
ProcessStartInfo sInf = new ProcessStartInfo();
sInf.FileName = "EXCEL.EXE";
string XlsPath = Server.MapPath(@"~/SupportDocuments/" + Request.Cookies["BCookies"]["SessionUserName"].Trim().ToString() +"/" + FileName);
sInf.Arguments = XlsPath;
Process.Start(sInf);
}
我是否已授予通过IIS打开Excel文件的任何权限?
答案 0 :(得分:2)
您不希望Excel在您的网络服务器上启动。而是使用Response.WriteFile()
例如
if (e.CommandName == "View")
{
int index = Convert.ToInt32(e.CommandArgument);
string FileName = ((Label)gvwUserManual.Rows[index].FindControl("lblFileName")).Text;
string XlsPath = Server.MapPath(@"~/SupportDocuments/" + Request.Cookies["BCookies"]["SessionUserName"].Trim().ToString() +"/" + FileName);
// send file to user
Response.Clear();
Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
Response.ContentType = "application/octet-stream";
Response.WriteFile(XlsPath);
Response.Flush();
Response.End();
}
您可以做的其他事情是在下载链接中使用Office URI scheme,如果您确定用户已安装Excel,那么您可以构建如下的超链接:
<a href="ms-excel:ofv|u|https://www.example.com/SupportDocuments/foo.xls">Open XLSX</a>
ms-excel:ofv|u|
前缀应由Excel处理(如果已安装)。
下载链接的模板可能如下所示:
<asp:HyperLink runat="server"
NavigateUrl='<%# "ms-excel:ofv|u|" + new Uri(Request.Uri, "/SupportDocuments/" + your_filename_variable ).AbsoluteUri %>'
Text="Read" />
答案 1 :(得分:1)
我不知道为什么你需要这样做,但无论如何:运行你的web应用程序的iis用户,没有那么多权限来运行excel应用程序,你可以更改你的应用程序池标识(IIS管理器) - &gt; ApplicationPools - &gt;“YourApplicationPool”高级设置 - &gt;标识),从b
到b