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.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
的工作方式类似,其中 运行 执行命令并退出。省略此参数将 运行 无论您告诉它什么,然后返回交互模式(除非您以 non-interactive 用户身份执行它)。
也有可能 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 中的命令末尾附加 &
,并且应该在此处产生相同的效果。
我正在尝试在 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.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
的工作方式类似,其中 运行 执行命令并退出。省略此参数将 运行 无论您告诉它什么,然后返回交互模式(除非您以 non-interactive 用户身份执行它)。也有可能
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 中的命令末尾附加&
,并且应该在此处产生相同的效果。