Как получить вывод из ExecDos :: exec - PullRequest
3 голосов
/ 10 января 2012

Когда я выполняю netstat -a |find /C $portNumber в командной строке, я получаю общее количество строк, где существует данный номер порта.

Я хочу получить тот же счетчик в любой переменной, чтобы я мог проверить, занят ли порт в NSIS или занят.

Я исключаю приведенную ниже команду, и я пытался разными способами, но я не могу получить выходные данные ExecDos :: exec в переменной или в стеке.

ExecDos::exec "netstat -a |find /C '$portNumber'| $output"

1 Ответ

6 голосов
/ 10 января 2012

Чтобы включить поведение оболочки, вы должны выполнить cmd.exe /C yourcommand (или развернуть% ComSpec% с помощью ExpandEnvStrings, но hardcoding cmd.exe подходит, если вы не поддерживаете Win9x)

Или вы можете попробовать Плагин 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
...