在Azure函数中从C#执行java.exe
我正在尝试执行java以从Azure函数运行JAR文件,但似乎没有定义java PATH变量或其他什么,因为Azure似乎找不到它。代码如下:在Azure函数中从C#执行java.exe,java,c#,azure,azure-functions,Java,C#,Azure,Azure Functions,我正在尝试执行java以从Azure函数运行JAR文件,但似乎没有定义java PATH变量或其他什么,因为Azure似乎找不到它。代码如下: Process proc = new Process(); try { proc.StartInfo.UseShellExecute = false; proc.StartInfo.CreateNoWindow = false; proc.Start
Process proc = new Process();
try
{
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "java.exe";
proc.StartInfo.Arguments = "-jar file path and some more arguments";
proc.Start();
proc.WaitForExit();
if (proc.HasExited)
log.Info(proc.StandardOutput.ReadToEnd());
log.Info("Java Success!");
}
catch (Exception e)
{
log.Info("Java Fail");
log.Info(e.Message);
}
即使我删除proc.StartInfo.Arguments
或告诉它使用java.exe
而不是java
,我仍然会收到相同的错误,如下所示:
[信息]系统找不到指定的文件
Azure函数中不支持调用java吗?OK解决了这个问题。到目前为止,最好的方法是完全限定java.exe的路径 所以我改变了
proc.StartInfo.FileName=java.exe”
到
proc.StartInfo.FileName=“D:\\ProgramFiles(x86)\\Java\\jdk1.8.0\u 73\\bin\\Java.exe”;
您可以使用KUDU找出Java的完整路径,即
如果单击工具->调试控制台,您可以浏览,直到找到Java所在的位置
注意:硬编码到Java的路径可能是个坏主意,因此您可能应该使用应用程序设置
编辑下面是我最后一个项目的GitHub回购的链接。该项目做了一些其他的事情,但是你可以看到我在哪里调用Java来执行Batik JAR。试试下面的说法:正确的方法是:
proc.StartInfo.FileName=Environment.ExpandEnvironmentVariables(Path.Combine(“%JAVA\u HOME%”,“bin”,“JAVA.exe”);
您应该始终使用环境变量(如果可用)不是二进制文件的绝对路径:)。呵呵,我在看你的代码,然后问自己好吧,好吧,但这是怎么回事,是不是每个主机上都安装了java,然后来到这里。你还在使用这段代码吗?