2017-09-20 9 views
0

私はasp.net、c#アプリケーションを開発しました。そのアプリケーションでは、私はファイルを開くのようなタスクを持って、私はビジュアルスタジオ、を開発するときに仕事をしてきましたローカルでの作業はです。Asp.NetでIISサーバーをホスティングするときExcelファイルを開くことができませんC#

私はIISサーバーにアプリケーションをホストしていたときに、読み取りボタンをクリックすると応答しません。

私のIISのバージョン - 7.5.7600

enter image description here

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ファイルを開くための許可を与えていますか?

+2

は、なぜあなたは、実際にOPEN Excelは、サーバー上のIISでのファイルでしょうか?どうして?必要なのは、IISで開くのではなく、ユーザーがダウンロードできるようにすることです。私が 'ProcessStartInfo'を見た時、大きな赤い旗が上がった –

答えて

1

私はなぜあなたがそれを行う必要があるのか​​分からないが、とにかく:Webアプリケーションを実行するiisユーザは、単にエクセルアプリケーションを実行するための多くの権利を持っていない、あなたはアプリケーションプールIDを変更することができますマネージャ - >アプリケーションプール - > "YourApplicationPool"の詳細設定 - >アイデンティティ)は、ApplicationPoolIdentityからLocalSystem

+0

他の解決策がありますか? – Surya

2

あなたのWebサーバーでは起動しないようにします。代わりに、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(); 
} 

あなたができる何か他のものを使用すると、ユーザーはExcelがインストールされていることを確認している場合は、そのようなハイパーリンクをcontructので、ダウンロードリンクでOffice URI schemeを使用している:

<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" /> 
+0

返信いただきありがとうございます。上記のコードを試しましたが、Excelファイルがダウンロードされています。私はファイルをダウンロードしたくありません。何か私の要件は、ダウンロードボタンをクリックすると、Excelファイルがダウンロードせずに開く必要があります。 – Surya

+0

あなたが何を記述しているかは、ユーザが制御する動作です。アプリケーション制御の動作ではありません。 – Seano666

+0

@スーリヤ - あなたはそれをすることはできません。それは2017年であり、ユーザーのコンピュータ上で任意のアプリを実行することは、正当な理由でできることではありません。 –

関連する問題