2017-04-05 77 views
1

私はMVC .NETアプリケーションを持っていて、サーバー上でいくつかの.exesを実行したいと思います。 exesはjarsigner.exeとzipalign.exeで、アンドロイドAPKの変更と再署名に使用されます。私はコントローラからそれらを実行したい。Azure Appサービスで.EXEを実行する方法

これは、アプリケーションを起動するプロセスを使用してローカルで動作しますが、私は不正行為をし、.exeへのハードコードされたパスと、exeファイルで使用されるものを含むフォルダを使用しました。

Visual Studioで私のプロジェクトのトップレベルに.exesを追加し、.exesで処理するファイルを含むフォルダを追加しました。

私はexesとファイルのフォルダへのパスをどのように取得するのが苦労しています。私はそれを持っていれば、私はプロセスを呼び出すことができます(私は許可の問題に遭うかもしれないと思うが、一度に1ステップ...)。

var processInfo = new ProcessStartInfo(@"C:\jarsigner.exe", @"..arguments"){ 
CreateNoWindow = true, UseShellExecute = false 
}; 

答えて

1

私はEXEファイルへの、およびファイルのフォルダへのパスを取得する方法をトレーニングするために苦労しています。

ファイルがプロジェクトのトップレベルにある場合。 Server.MapPath(@ "〜\ Jar \ TextFile1.txt")を使用してパスを見つけることができます。 jarsigner.exeの場合。それはあなたのJava JDKのbinフォルダにあります。そこで、環境変数を使用することができます。

jarsigner.exeと実行結果のパスを取得するサンプルコードを示します。

//string path = Server.MapPath(@"~\Jar\TextFile1.txt"); //get file path on the top-level of project(eg. ~\folder\xxx) 
     string JavaPath = Environment.GetEnvironmentVariable("JAVA_HOME", EnvironmentVariableTarget.Machine); 
     if(string.IsNullOrEmpty(JavaPath)){ 
     JavaPath = Environment.GetEnvironmentVariable("JAVA_HOME", EnvironmentVariableTarget.User); 
     } 
     string path = JavaPath + @"\bin\jarsigner.exe"; 

     var processInfo = new ProcessStartInfo() 
     { 
      FileName = path, 
      CreateNoWindow = true, 
      UseShellExecute = false, 
      WindowStyle = ProcessWindowStyle.Hidden 
     }; 

     Process proc = Process.Start(processInfo); 
     proc.WaitForExit(); 
     if (proc.ExitCode == 0) 
      ViewBag.Message = path + " exec success."; 
     else 
      ViewBag.Message = path + " exec fail."; 

     return View(); 

enter image description here enter image description here

+0

これは、ローカルマシン上、ほとんどのAzureサーバー上で素晴らしい作品。サーバー上の問題は、EnvironmentVariable "Java_HOME"がヌルである、つまりJREがサーバーにインストールされていないことです。それ、どうやったら出来るの?私はちょうどjava.dllをコピーし、Java環境変数を手動で設定しようとしましたが、うまくいきませんでした。 – gregm

+0

あなたのKUDUのcmdで "echo%JAVA_Home%"がヌルですか? –

+0

Environment.GetEnvironmentVariable( "Java_HOME"、EnvironmentVariableTarget.Machine)をチェックするとnullです – gregm

関連する問題