2017-12-04 8 views
0

私はこのプロジェクトをローカルでブラウザで実行すると、mvc 3アプリケーションで.EXEファイルを実行します。 。問題は、このプロジェクトを公開し、実行したボタンコードをクリックしてタスクマネージャーでプロセスを開始すると、ウィンドウ8.1上のIIS(8.5)サーバー上にホストするときですが、フロントには表示されません。
この例では、notepad.exeファイルを実行します。
次のコードはhtmlです。ユーザーがそのボタンのコントローラーメソッドをクリックすると、そのランコードと呼ばれます。
ユーザーがボタンをクリックすると、これが実行されるcodです。アカウント・コントローラ内部ASP.NETプロセス。タスクマネージャのタスクバックグラウンドを開始します。IIS8.5(Windows 8.1)の前に来ません。

$("#Button11").click(function (event) { 

    $.post("/Account/Start_Appl", {}, function (data) { 

    }); 

    event.preventDefault(); 
}); 

と開始Start_Appl方法は、次のコード行を有しています。

public string Start_Appl() 
    { string path="C:\\Windows\\System32\\notepad.exe"; 
     ProcessStartInfo psi = new ProcessStartInfo(); 
     psi.UseShellExecute = true; 
     psi.LoadUserProfile = true; 
     psi.WorkingDirectory = path; 
     psi.FileName = path; 

     Process.Start(psi); 


     return "ok"; 

    } 

iis(8.5)を使用して.EXEファイルを実行したい場合は、この問題を解決してください。 私はインターネットでチェックしますが、この問題の適切な解決策が見つかりません。
このリンクもチェックしていますが、何の助けもありません。
ASP.NET Process.Start not working on IIS8 (Windows 8.1)

+0

あなたの問題はパーミッションだと思いますが、TBHは何でもかまいません。なぜサーバー上にメモ帳を開くWebページが必要なのですか? o_Oは無意味だと思われる – Liam

+1

IISでサイトを実行しているプロセスは、ユーザー向けのプロセスではありません。したがって、あなたはそれを見ることができません。私がこれを行うと考えることができる唯一の方法は、ローカルユーザーとして実行され、何らかの種類の信号を待つ別のアプリケーション(コンソールアプリケーション、winforms、トレイアプリケーションなど)を書くことです。あなたのWebアプリケーションがこの信号を送信させると、コンソールアプリケーションがプログラムを起動します。しかし、私はこれが奇妙なことであると指摘しなければならないが、意味のあることはしない。 – GPW

+0

いくつかのことについて考える: - 複数のユーザーがボタンを押すとどうする一度?ユーザーが誤ってボタンを2回以上押すと、何をするのですか(多くのコードを追加しない限り、コントローラーは必ずしも同じ人物であるとは限りません) - アプリケーションがユーザーの入力を望んでいると判断した場合ディスクスペースがなくなり、利用可能なアップデートを自動的に検出して、ユーザーに尋ねるなど)。この「解決策」が解決すると思われる問題を教えてください。これよりも良い方法があります。 – GPW

答えて

0

OK、最初のオフ、これを行うには非常に奇妙なことである - あなたの問題があるものは何でものためのより良いアプローチがあるように起こっています。つまり、私がこの状況で行うことは次のとおりです。

  1. データベースをJOB_QUEUEテーブルで作成します。このテーブルにあるものはあなた次第ですが、私はID、date_added、ジョブの構成を示すもの(例:実行するexeの名前)、およびステータスを示すフラグ
  2. ステータスを「保留」にしてこのテーブルにレコードを挿入するようにコントローラを変更します(これはALLです)。
  3. ユーザプロセスで実行される別のアプリケーションを作成します(Windowsフォームまたはコンソールアプリケーション)。このアプリケーションは、IISをホストするサーバーまたは別のホストを実行するサーバーで実行できます。すべて同じデータベースへのアクセスが必要です。
  4. この独立したアプリケーションを、保留状態のジョブのジョブキューテーブルで定期的に確認します。
  5. 新しいジョブが検出されると、アプリケーションはデータベースを更新してジョブが「進行中」になりジョブを実行します。成功するとジョブは「完了」に更新され、失敗した場合は「失敗」に更新されます。
  6. その後、単にテーブルを監視します。

キューのデータベースの代わりに使用できる他の多くのものがありますが、これは書き込みが簡単でデバッグ/テストが容易であるだけでなく、複数のクライアントを追加したり、 info、およびコントローラメソッドを追加して、要求された/完了したジョブと進捗状況を報告します。

+0

.exeファイルを起動する2番目のアプリケーションでは、iisサーバー上でそのアプリケーションをホストしたり、コンピュータ上でローカルに実行したりします。 –

+0

データベースに接続できる限り、どこでも実行できます。 IISを実行しているサーバーで実行していても、ログオンしているユーザーとして実行する必要があります。リモートデスクトップなどを介してサーバーに接続してください...個人的には別のPCでホストします。 – GPW

0

iis(8.5)およびウィンドウ8.1の外部.exeファイルを実行するため。我々は技術は、このリンク私は私のStart_Appl関数のようにある変更してい
Custom URL Protocol
を確認し、アプリケーションを起動するために
カスタムURLプロトコルを使用していました。

public string Start_Appl() 
    { 
     try 
     { 

      string myAppPath = "C:\\Windows\\System32\\notepad.exe"; 

      RegistryKey key = Registry.ClassesRoot.OpenSubKey("myAppa"); //open myApp protocol's subkey 

      if (key == null) //if the protocol is not registered yet...we register it 
      { 
       key = Registry.ClassesRoot.CreateSubKey("myAppa"); 
       key.SetValue(string.Empty, "URL: myApp Protocol"); 
       key.SetValue("URL Protocol", string.Empty); 

       key = key.CreateSubKey(@"shell\open\command"); 
       key.SetValue(string.Empty, myAppPath + " " + "%1"); 

      } 

      key.Close(); 

     } 
     catch (Exception e) { 
      return e.Message.ToString(); 
     } 



     return "ok"; 

    } 

それはすでに作成して設定された値を、その後、我々は、ユーザーがボタンに機能LaunchURLScriptをクリックすると、私のaspxページ上のボタンを

<input type="submit" name="Launch" id="Launch" value="Launch Custom URL" onclick="LaunchURLScript()"> 

ようであることを確認されていない場合、我々は最初のキーを登録は、コールであり、我々は最初のURLプロトを作るために、コントローラのメソッドを呼び出して内部ため、この関数の中、私たちはそれに

function LaunchURLScript() { 
    $.post("/Account/Start_Appl", {}, function (data) { 

     if (data = "ok") { 
      alert("ok"); 
      var url = "myAppa:"; window.open(url); self.focus(); 
     } 

    }); 

} 

を次のコードを記述します既に存在していない場合はcolを、最後に私の新しいノートパッドexeファイルをランチ新しいウィンドウを開きます。
このようにして問題を解決します。

関連する問題