问题描述
在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 -command "Start-Job { 'C:/Program Files (x86)/SEGGER/JLink/JLinkGDBServer.exe' -port 2331 -s -CPU Cortex-M -device STM32L476RG -endian little -speed 4000 -vd" }
包装该命令,该命令将在不将其附加到当前PowerShell进程的情况下启动它。例如:Start-Job
在Linux中,使用
&
与在命令末尾附加// pages/date/[year]/[month]/[dayOfMonth].tsx import { useRouter } from "next/router"; import { Day } from "../../../../components/Day"; type StringQueryParams = Record<keyof QueryParams,string>; interface QueryParams { year: number; month: number; dayOfMonth: number; } const transformParams = ({ year,month,dayOfMonth }: StringQueryParams): QueryParams => ({ year: parseInt(year),month: parseInt(month),dayOfMonth: parseInt(dayOfMonth),}); const DayPage: React.FC = () => { const { query } = useRouter(); const params = transformParams(query as StringQueryParams); return <Day {...params} />; }; export default DayPage;
类似,并且在此处应具有相同的效果。