使用NSIS执行Windows命令显示输出时返回0的问题排查
NSIS执行命令获取输出显示为0的问题解决方法
你遇到的问题是没搞清楚nsExec::ExecToStack的栈返回顺序:它会先把命令的退出码压入栈,之后才是命令的标准输出内容。你现在只Pop $0拿到的是退出码0(代表命令执行成功),根本没取到实际输出。
修正后的代码需要先弹出退出码,再弹出真正的输出内容:
nsExec::ExecToStack 'powershell -NoProfile -Command "$(& {$Args[0]})" "where code"' Pop $1 ; 弹出命令的退出码(0表示执行成功) Pop $0 ; 弹出命令的实际输出结果 ${NSD_SetText} $LocationTextbox "$0"
额外优化建议:你的powershell命令写法可以简化,没必要嵌套$(& {$Args[0]}),直接写成下面这样也能正常获取输出:
nsExec::ExecToStack 'powershell -NoProfile -Command "where code"' Pop $1 Pop $0 ${NSD_SetText} $LocationTextbox "$0"
内容的提问来源于stack exchange,提问作者Promod Kumar
相关产品推荐
相关产品推荐

