3

コマンドプロンプトで実行するnetstat -a |find /C $portNumberと、指定されたポート番号が存在する行の総数が表示されます。

ポートがすでに占有されているか、NSIS で空いているかを確認できるように、任意の変数で同じカウントを取得したいと考えています。

以下のコマンドを実行していて、さまざまな方法で試しましたが、変数またはスタックで ExecDos::exec の出力を取得できません。

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

1 に答える 1

7

シェルの動作を有効にするには、実行する必要がありますcmd.exe /C yourcommand(または、Win9x をサポートしていない場合は、%ComSpec% を展開しますExpandEnvStringsが、cmd.exe をハードコーディングしても問題ありません)。

または、これを行うExecCmd プラグインを試すこともできます (ただし、オプションが少ないため、出力をファイルにリダイレクトする必要があります)。

nsExec::ExecToStackcmdプレフィックスでも機能するはずです...

編集:

これが実際の例です(デフォルトのインストールの一部であるため、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
于 2012-01-10T08:37:59.630 に答える