我有一个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
};
答案 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();