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

powershell run from cmd to to start program and exit. The program will stay running, but powershell should extit

我正在尝试在 Ninja 构建过程结束时 运行 window 在 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 window 应该保留)


编辑:运行 来自 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 的工作方式类似,其中 运行 执行命令并退出。省略此参数将 运行 无论您告诉它什么,然后返回交互模式(除非您以 non-interactive 用户身份执行它)。

  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 中的命令末尾附加 &,并且应该在此处产生相同的效果。