当我netstat -a |find /C $portNumber
在命令提示符下执行时,我得到给定端口号存在的总行数。
我想在任何变量中获得相同的计数,以便我可以检查端口在 NSIS 中是否已被占用或空闲。
我正在执行以下命令,并尝试了多种方式,但无法在变量或堆栈中获取 ExecDos::exec 的输出。
ExecDos::exec "netstat -a |find /C '$portNumber'| $output"
当我netstat -a |find /C $portNumber
在命令提示符下执行时,我得到给定端口号存在的总行数。
我想在任何变量中获得相同的计数,以便我可以检查端口在 NSIS 中是否已被占用或空闲。
我正在执行以下命令,并尝试了多种方式,但无法在变量或堆栈中获取 ExecDos::exec 的输出。
ExecDos::exec "netstat -a |find /C '$portNumber'| $output"
要启用 shell 行为,您必须执行(如果您不支持 Win9x,则可以cmd.exe /C yourcommand
使用硬编码 cmd.exe 扩展 %ComSpec% )ExpandEnvStrings
或者您可以尝试为您执行此操作的ExecCmd 插件(但它的选项较少,因此您必须将输出重定向到文件)
nsExec::ExecToStack
带有 cmd 前缀的也应该可以工作...
编辑:
这是一个工作示例(我使用 nsExec,因为它是默认安装的一部分)
!include LogicLib.nsh
section
ExpandEnvStrings $0 %COMSPEC%
StrCpy $1 445 ;Port number
nsExec::ExecToStack '"$0" /C netstat -an|find /C ":$1"'
Pop $0
${If} $0 = 0
Pop $0
MessageBox mb_ok "Port count=$0"
${Else}
; Port not open...
${EndIf}
sectionend