加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

从Java应用程序调用时,Powershell进程挂起

发布时间:2020-12-14 05:48:44 所属栏目:Java 来源:网络整理
导读:我正在尝试编写一个简单的应用程序,它接受命令行争论(将是一个Power shell ps1文件),然后运行它.所以我已经开发了许多不同的方法,似乎遇到了问题.如果我尝试从 java中调用powershell,则启动windows进程并通过进程资源管理器可见,但是Power Shell永远不会返回
我正在尝试编写一个简单的应用程序,它接受命令行争论(将是一个Power shell ps1文件),然后运行它.所以我已经开发了许多不同的方法,似乎遇到了问题.如果我尝试从 java中调用powershell,则启动windows进程并通过进程资源管理器可见,但是Power Shell永远不会返回,它会以某种形式挂起.我使用的命令是:
String command = "powershell -noprofile -noninteractive "&C:newtst.ps1"";

然后使用以下命令执行该命令:

Runtime systemRuntime = Runtime.getRuntime();
Process proc = systemRuntime.exec(command);

目前我正在努力将位置编码为ps1文件,因为我试图将此作为一个问题进行排除.使用进程资源管理器,我可以看到挂起的powershell进程和传递给它的命令是:

powershell -noprofile -noninteractive "&C:newtst.ps1"

复制到cmd窗口时,可以启动tst.ps1文件.在这个例子中,文件本身非常简单,我认为我可以将其排除在原因之外,因为我试图启动其他ps1文件可以看到相同的行为.

为了进一步增加混乱,如果我使用上面发布的java代码并传入powershell命令而不是文件名,那么它就会成功运行.

我已经浏览过网络,看到很多人遇到同样的问题,但似乎没有人在那里发布解决方案,我希望它对我来说是一个简单的疏忽,可以轻松修复.

任何提示/提示表示赞赏:D

艾伦

解决方法

您必须关闭OutputStream才能退出Powershell.
Runtime systemRuntime = Runtime.getRuntime();
Process proc = systemRuntime.exec(command);

proc.getOutputStream().close();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读