2017-04-05 3 views
1

Ich habe eine MVC .NET-Anwendung und möchte einige .exes auf dem Server ausführen. Die exes sind jarsigner.exe und zipalign.exe, um ein Android APK zu ändern und neu zu signieren. Ich möchte sie vom Controller aus ausführen.So führen Sie eine .EXE in einem Azure App Service aus

Es funktioniert lokal, mit einem Prozess, um die Anwendung zu starten, aber ich habe betrogen und verwendet hardcoded Pfade zu der EXE und in den Ordner mit den Sachen von der EXE verwendet werden.

Ich habe die .exes zur obersten Ebene meines Projekts in Visual Studio hinzugefügt und einen Ordner hinzugefügt, der die Dateien enthält, die von .exes bearbeitet werden sollen.

Ich habe Schwierigkeiten zu trainieren, wie ich den Weg zu den Exes und zum Ordner der Dateien bekomme. Sobald ich das habe, kann ich dann den Prozess aufrufen (ich vermute, ich könnte Probleme mit Berechtigungen bekommen, aber einen Schritt nach dem anderen ...).

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

Antwort

1

ich zum Training zu kämpfen, wie ich den Pfad zu den EXE-Dateien zu erhalten, und in den Ordner Dateien.

Wenn Ihre Dateien unter der obersten Ebene des Projekts. Wir können den Pfad mithilfe von Server.MapPath (@ "~ \ Jar \ TextFile1.txt") finden. Für jarsigner.exe. Es befindet sich im bin-Ordner Ihres Java-JDK. Also können wir die Umgebungsvariable verwenden.

Hier ist der Beispielcode, um den Pfad von jarsigner.exe und laufendem Ergebnis zu erhalten.

//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

Dies funktioniert gut auf dem lokalen Rechner, und fast auf dem Azure-Server. Das Problem auf dem Server ist, dass die EnvironmentVariable "Java_HOME" null ist, d. H. Die JRE ist nicht auf dem Server installiert. Wie mache ich das? Ich habe versucht, nur über die java.dll und manuelle Einstellung der Java-Umgebungsvariable, aber das hat nicht funktioniert. – gregm

+0

Meinst du in deinem KUDU cmd "echo% JAVA_Home%" ist null? –

+0

Wenn ich Environment.GetEnvironmentVariable ("Java_HOME", EnvironmentVariableTarget.Machine) überprüfen, ist es null – gregm

Verwandte Themen