我尝试在 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.exe
或 powershell.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 进程可能由于以下两个原因之一而未退出:
您没有使用
powershell.exe -command
来调用它。其工作原理与 cmd.exe/c 类似,运行命令并退出。省略此参数将运行您告诉它的任何内容,然后返回到交互模式(除非您作为非交互用户执行它)。也有可能
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/