首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Openshift容器平台上执行.net内核中的.jar文件

在Openshift容器平台上执行.net内核中的.jar文件
EN

Stack Overflow用户
提问于 2018-03-06 12:41:29
回答 1查看 976关注 0票数 0

net核心应用程序使用.net Process类在内部调用java (.jar)文件。我已经使用cmd.exe来运行带有参数的.jar文件。我已经在Openshift Container平台上部署了这个应用程序。但是由于openshift是在Linux上运行的,所以cmd.exe是不可用的。下面是.net内核中执行jar文件的代码。

代码语言:javascript
复制
            Process cmd = new Process();
            cmd.StartInfo.UseShellExecute = false;
            cmd.StartInfo.WorkingDirectory = Common.JarWorkingDir;
            cmd.StartInfo.FileName = "cmd.exe";
            cmd.StartInfo.Arguments = "/K java -jar " + string.Format("{0} {1}", '"' + Common.JarFilePath + '"', '"' + sourceCodePath + '"');
            cmd.StartInfo.CreateNoWindow = true;
            cmd.StartInfo.RedirectStandardInput = true;
            cmd.Start();
            cmd.StandardInput.WriteLine("exit");
            cmd.StandardInput.Flush();
            cmd.WaitForExit();

所以Jar文件无法执行。在OpenShift上使用.net执行此jar的任何替代方法。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2018-03-06 13:00:51

OpenShift本质上是运行Linux容器的Kubernetes。换句话说,您的代码应该像在Linux上运行一样。

不使用cmd.exe,而使用bash (或者,sh,或者实际上,您的容器中预先安装了任何shell ):

代码语言:javascript
复制
Process cmd = new Process();
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.WorkingDirectory = Common.JarWorkingDir;
cmd.StartInfo.FileName = "bash";
cmd.StartInfo.Arguments = "-c 'java -jar " + string.Format("{0} {1}", '"' + Common.JarFilePath + '"', '"' + sourceCodePath + '"'');
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.Start();
cmd.StandardInput.WriteLine("exit");
cmd.StandardInput.Flush();
cmd.WaitForExit();

您甚至可以删除其中的一些行。例如,不需要CreateNoWindow,因为.NET内核根本不在Linux上创建窗口。

如果您没有shell表达式,也许您甚至可以让事情变得更简单,并由此简化:

代码语言:javascript
复制
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.FileName = "bash";
cmd.StartInfo.Arguments = "-c 'java -jar " + string.Format("{0} {1}", '"' + Common.JarFilePath + '"', '"' + sourceCodePath + '"'');

类似这样的东西:

代码语言:javascript
复制
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.FileName = "java";
cmd.StartInfo.Arguments = $"-jar \"{Common.JarFilePath}\" \"{sourceCodePath}\"";

哦,注意Arguments变量中的引号。如果用单引号将整个命令放在-c后面,应该没问题,但是如果要做一些更复杂的事情--如果Common.JarFilePath不是一个简单的文件名--它可能就不能很好地工作。一定要测试和调整它。也许可以考虑一下EscapeAndConcatenate

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49123509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档