【问题标题】:powershell run from cmd to to start program and exit. The program will stay running, but powershell should extitpowershell 从 cmd 运行以启动程序并退出。程序将继续运行,但 powershell 应该退出
【发布时间】:2020-08-22 01:29:41
【问题描述】:

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

【问题讨论】:

  • @KenWhite 如果这么简单,我不会问这个问题。我从 CMake 生成的 Ninja 构建脚本中调用它。
  • 那么您应该将其包含在原始问题中。我们无法读懂您的想法,因此所有可用信息都需要在您的帖子中。
  • 你试过Start-Process吗?是否有任何理由必须使用 PowerShell 来启动程序?
  • @lit 没有任何理由。我只是尝试启动程序。我会试试 Start-proces

标签: powershell cmd exit execution


【解决方案1】:

如果你可以调用cmd.exepowershell.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. 您没有使用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 中将& 附加到您的命令末尾基本相似,在这里应该会产生相同的效果。

【讨论】:

  • If you can call cmd.exe or powershell.exe cmd 由 Ninja 脚本自动调用。我使用-command 并没有帮助。 Powershell 等待程序终止。在 Linux 中这很容易。
  • 如果 ninja 通过 cmd 运行程序,我不明白你为什么要从 PowerShell 调用 JLinkGDBServer.exe。只需直接从 ninja 运行 JLinkGDBServer.exe,从等式中完全删除 PowerShell。
  • 我更新了一个新的代码示例,展示了如何在您的命令中使用Start-Job
  • @BendertheGreatest,如果 OP 只是想开始工作并且不打算进行进一步的监控,那么使用 Start-Job 而不是 Start-Process 有什么优势吗?
  • 在这种情况下,两者都可以工作,因为 OP 在启动它后不再关心与进程的交互。我选择建议Start-Job,因为 OP 似乎关心“轻松”,并且它需要较少的命名参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多