在Azure函数中从C#执行java.exe

在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

我正在尝试执行java以从Azure函数运行JAR文件,但似乎没有定义java PATH变量或其他什么,因为Azure似乎找不到它。代码如下:

 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,然后来到这里。你还在使用这段代码吗?