首页 > 解决方案 > powershell 从 cmd 运行以启动程序并退出。程序将继续运行,但 powershell 应该退出

问题描述

我试图在 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'

标签: powershellcmdexitexecution

解决方案


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

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

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

作为记录,您的 PowerShell 进程可能由于以下两个原因之一而未退出:

  1. 你没有使用 call it with powershell.exe -commandcmd.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" }
    

    usingStart-Job基本上类似于&在 Linux 中将 an 附加到命令的末尾,并且在这里应该给您相同的效果。


推荐阅读