从cmd运行powershell来启动程序并退出。该程序将保持运行,但 powershell 应该退出

标签 powershell cmd exit execution

我尝试在 Ninja 构建过程结束时在 JlinkGDBServer(它是带有 GUI 的 Windows 应用程序)上运行窗口版本。

powershell是从cmd运行的

cmd.exe /C "powershell  & "C:/Program Files (x86)/SEGGER/JLink/JLinkGDBServer.exe" -port 2331 -s -CPU Cortex-M -device STM32L476RG -endian little -speed 4000 -vd &"

但是 powershell 不会退出(jlinkGDBserver 窗口应该保留)


编辑:它是从 Cmake 生成的 Ninja 脚本运行的。我在这里只有部分控制权。

解决方案:

powershell -command Start-Process -FilePath "'C:/Program Files (x86)/SEGGER/JLink/JLinkGDBServer.exe'" -ArgumentList '-port 2331', '-s', '-CPU Cortex-M', '-device stm32l476RG', '-endian little', '-speed 4000', '-vd'

最佳答案

如果您可以调用 cmd.exepowershell.exe,您也应该能够直接调用该程序。我不知道为什么您要调用 cmd.exe 来调用 powershell.exe 来调用 JLinkGDBServer.exe

除非忍者有一些细微差别,否则我不明白这应该是运行命令所需的全部内容:

"C:/Program Files (x86)/SEGGER/JLink/JLinkGDBServer.exe" -port 2331 -s -CPU Cortex-M -device STM32L476RG -endian little -speed 4000 -vd

郑重声明,您的 PowerShell 进程可能由于以下两个原因之一而未退出:

  1. 您没有使用 powershell.exe -command 来调用它。其工作原理与 cmd.exe/c 类似,运行命令并退出。省略此参数将运行您告诉它的任何内容,然后返回到交互模式(除非您作为非交互用户执行它)。

  2. 也有可能 JLinkGDBServer.exe 会阻止执行,甚至在进程启动后也不会返回交互模式。在这种情况下,您可以使用 Start-Job 包装该命令,这将启动它而不将其附加到当前的 PowerShell 进程。例如:

    powershell -command "Start-Job { 'C:/Program Files (x86)/SEGGER/JLink/JLinkGDBServer.exe' -port 2331 -s -CPU Cortex-M -device STM32L476RG -endian little -speed 4000 -vd" }
    

    使用 Start-Job 基本上类似于在 Linux 中将 & 附加到命令末尾,并且应该给您带来相同的效果。

关于从cmd运行powershell来启动程序并退出。该程序将保持运行,但 powershell 应该退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63531764/

相关文章:

.net - 在Powershell中使用SmtpClient进行FQDN

windows - Windows批处理脚本以解析CSV文件并输出文本文件

windows - 如何以编程方式检查我运行的是 Windows 8.1?

java - 在 CL Java 程序中显示多个消息对话框

bash - 从 jenkins groovy 脚本中的 bash 脚本捕获退出代码

c# - Invoke-WebRequest, GET 带参数抛出异常

powershell - 使用Powershell编辑文本文件中的特定数据列

sql - 计算上次将文件写入 PowerShell 的月份的第几周

c# - 在 C# winforms 中使用 CMD 命令

python - 按 enter 键退出 while 循环而不阻塞。我该如何改进这种方法?