2016-12-11 7 views
1

私はこの問題を解決する方法を公開しています。私は最良の方法はコントローラにマウントされるパスを提出することだと思うし、コントローラはローカルで動作し、パスをマウントするpythonスクリプトを返すでしょう。後でActive Directoryのアクセス許可を確認する必要があるかもしれませんが、それは別の質問です。私たちはすべてのクライアントとサーバーを望みどおりに構成することができるので、何らかの形でダウンロード後にマウントスクリプトを実行できるようにする必要があります。窓にマウントするだけで本当に心配ですが、Macはオプションです。私の主な関心事は、サーバーにスクリプトを送信してクライアントにスクリプトを実行させる方法と、これがこの必要性を満たす正しいアプローチであるかどうかです。 2番目の関心事は、任意のリモートサーバー共有にアクセスするためのパスをどのように形成するかです.3番目の問題は、最初にアクセス許可を確認することです。どんな助けもありがたい。ASP.NET C#MVC Webサイトでは、ボタンをクリックするとドライブをマウントできますか?

public ActionResult ProjectMountSubmit(string project_path, int project_number) { 
      //Send mount script to user and make him run it 
      return RedirectToAction("Project", "Home", new { ProjectNumber = project_number }); 
     } 
+0

したがって、ドライブをマウントするための管理特権で最もおそらく実行されるpythonスクリプトをhttpクライアントに渡すことを計画していますか?危険なように聞こえる人。 –

+0

間違いなく他のオプションを探していますが、他の開発者からの入力が必要です。このサイトはLAN上にあることに注意してください。私はMVCのWebサイトがクライアントアプリケーションであったはずだと思っていますが、それは私が推測するような問題ではないでしょう...情報はまだSQLサーバーから来ます。私はこれが特殊なアプリケーションであることは分かっています...しかし、それは要件です。ユーザーはプロジェクトをクリックしたときにフォルダをマウントできなければなりません。たぶん私はすべてのクライアント上で実行されているサービスを持っていますが、ブラウザからどのように通信するのでしょうか。エルグ – gunslingor

+0

また、javascriptをマウントすることを検討していましたが、これが可能であることを示す何かをオンラインで見つけることはできません。 – gunslingor

答えて

0

最終回答ブラウザにスクリプトを送信してください。ユーザーは自動的に開くようにブラウザを設定することもできます。Pythonをインストールして.pyファイルに関連付けることで、ダブルクリックを素早く実行できるようにする必要があります。そのスクリプト/ python MIMEが有効かどうかはわかりませんが、動作しています。改善には、何らかの理由でかみそりを使ってPythonスクリプトを修正し、すべての内部引用符ではなく、色分けを失うようにすることもできます。スラッシュを再帰的に2回エスケープする必要があります.1つはファイルストリーム用で、もう1つはダウンロードして実行するスクリプト用です。

public ActionResult ProjectMountSubmit(int project_number, string drive_letter) { 
      ProjectsBAL b = new ProjectsBAL(); 
      Projects c = b.GetProject(project_number); 
      //generate python mount script 
      string script = "import ctypes\n" + 
          "import subprocess\n" + 
          "import os\n" + 
          "command = 'net use " + drive_letter + ": \\\\\\\\MSI\\\\Users\\\\gunslingor\\\\Desktop\\\\Storage\\\\" + c.CompanyName + "\\\\Clients\\\\" + c.ClientName + "\\\\" + c.ProjectNumber + "_" + c.ProjectName + "'\n" + 
          "returned = subprocess.Popen(command, shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)\n" + 
          "cmd_err_lines = returned.stderr.readlines()"; 

      var stream = new MemoryStream(); 
      StreamWriter writer = new StreamWriter(stream); 
      writer.Write(script); 
      writer.Flush(); 
      stream.Position = 0; 
      //Send mount script to user, double click to run (python must be installed and associated to the file type py) 
      return File(stream, "script/python", "Automount.py"); 
     } 
関連する問題