gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:57:16 27 4
gpt4 key购买 nike

我正在尝试编写一个简单的应用程序,它接受命令行参数(这将是一个 Powershell ps1 文件)然后运行它。因此,我尝试了多种不同的方法,但似乎遇到了问题。如果我尝试从 java 中调用 powershell,windows 进程将启动并通过进程资源管理器可见,但是 powershell 永远不会返回,它看起来卡在某种循环中。我使用的命令是:

            String command = "powershell -noprofile -noninteractive \"&C:\\new\\tst.ps1\"";

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

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

目前我正在将位置硬编码到 ps1 文件中,因为我试图将其排除在外。使用进程资源管理器,我可以看到挂起的 powershell 进程和传递给它的命令是:

powershell -noprofile -noninteractive "&C:\new\tst.ps1"

将其复制到 cmd 窗口后,可以启动 tst.ps1 文件。在此示例中,文件本身非常简单,我认为我可以排除它是卡住的原因,因为我尝试启动其他 ps1 文件时可以看到相同的行为。

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

我在网上搜索了一下,看到很多人遇到同样的问题,但似乎没有人在那里发布解决方案,我希望这是我的一个简单疏忽,并且可以轻松修复。

感谢任何提示/技巧 :D

艾伦

最佳答案

您必须关闭 OutputStream 才能让 Powershell 退出。

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

proc.getOutputStream().close();

关于java - 从 Java 应用程序调用时 Powershell 进程挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com