如何在Azure应用服务中运行.EXE

时间:2017-04-05 14:20:32

标签: c# azure exe azure-web-sites

我有一个MVC .NET应用程序,我想在服务器上运行一些.exes。 exes是jarsigner.exe和zipalign.exe,用于修改和重新签名Android APK。我想从Controller运行它们。

它在本地工作,使用Process来启动应用程序,但我已经欺骗并使用了.exe的硬编码路径以及包含exe的东西的文件夹。

我已将.exes添加到visual studio中我的项目的顶层,并添加了一个包含.exes要处理的文件的文件夹。

我正在努力锻炼我如何获得exes的路径以及文件夹。一旦我有了,我就可以调用进程(我怀疑我可能会遇到权限问题,但一次只能一步......)。

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

1 个答案:

答案 0 :(得分:2)

  

我正在努力锻炼我如何获得前路的路径以及文件夹。

如果您的文件位于项目的顶层。我们可以使用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