0

現在Process.start()、ASP MVC サイトのコントローラー メソッドで使用しています。これは小さなイントラネット アプリであるため、設定した基本的なもの以外のセキュリティは大きな問題ではありません。

ユーザーは、LAN 上の共有フォルダーの場所である添付ファイルのファイルパスを入力できます。次に、各アカウントの編集ページが表示されると、ページに添付ファイルへのハイパーリンクが表示されます。ユーザーはハイパーリンクをクリックして、ファイルのコピーやファイルのコピーをダウンロードするのではなく、ファイルを開くことができる必要があります。これにより、編集を行って保存できるようになります。

これに対する私の最初の試みはActionLink、ファイルの場所をコントローラーに送信する次のものを作成することでした。

<div class="M-editor-label" style="width: 400px;word-wrap: break-word;">
    @Html.ActionLink(Model.Attachment, "OpenAttachment", "BankListMaster", new { location = Model.Attachment }, new { @target = "_blank" })
</div>

次に、コントローラーは次Process.Start()のようにファイルを開くために使用します

    public void OpenAttachment(string location)
    {
        try
        {
            EventLog.WriteEntry("Monet", "Inside OpenAttachment |URL| " + location);

            Process proc = new Process();
            proc.StartInfo = new ProcessStartInfo(location);
            proc.Start();
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry("Monet", ex.StackTrace);
        }
    }

これは、ローカルでテストしていたときに問題なく機能しましたが、サーバーに Office のコピーがインストールされていないため、catchブロック に次のエラーが表示されます。

No application is associated with the specified file for this operation.  at 
System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at Monet.Controllers.BankListMasterController.OpenAttachment(String location) in 
C:\Projects\sym_Monet_INT\Monet\Controllers

私が使用している方法の修正の方向、または同じ目標を達成するより良い方法の方向に誰かが私を向けることができますか?

4

1 に答える 1

1

このProcess.Start()方法は、達成しようとしているものには機能しません。サーバー上で実行されているコントローラーがエンドユーザーのシステム上でプロセスを開始することはできません。テストでは、これはサーバーとクライアントがたまたま同じマシンであるためにのみ機能しました。アプリのクライアント側で実行される唯一のコードは Web ブラウザーであり、Web ブラウザーの唯一の制御ポイントは JavaScript です。次のような JavaScript 関数を作成できます。

<script type="text/javascript">
    function OpenFile(filePath) {
        var sh = new ActiveXObject("WScript.Shell");
        var fullFileName = "file://" + filePath;
        sh.run("\"" + fullFileName + "\"", 1);
    }
</script>

次に、これをボタンの onclick メソッドで次のように呼び出します。

<button onclick="OpenFile('c:/Users/UserName/Desktop/Test.txt');">Open</button>

その後、Razor View 構文を使用して、ボタン メソッドのパスを適切なパスに置き換えることができます。また、これは ActiveX を使用するため、クライアント ブラウザで ActiveX が許可されていることを確認する必要があることに注意してください。

于 2013-09-11T22:47:48.743 に答える