How to check if port is usable in Inno Setup?

前端 未结 2 634
没有蜡笔的小新
没有蜡笔的小新 2020-12-01 20:22

I need to check some port is usable or not? How can do that in Inno Setup? Is there any way to use socket in to Inno Setup? Is there any library for this? If there how can

相关标签:
2条回答
  • 2020-12-01 20:44

    You can use my function to check, if a port is available:

    function CheckPortOccupied(Port:String):Boolean;
    var
      ResultCode: Integer;
    begin
      Exec(ExpandConstant('{cmd}'), '/C netstat -na | findstr'+' /C:":'+Port+' "', '', 0,
           ewWaitUntilTerminated, ResultCode);
      if ResultCode <> 1 then 
      begin
        Log('this port('+Port+') is occupied');
        Result := True; 
      end
        else
      begin
        Result := False;
      end;
    end;
    
    0 讨论(0)
  • 2020-12-01 20:48

    Function to return (in MsgBox) service or program that use port 80. MsgBox will not shown if output is empty.

    function NextButtonClick(CurPage: Integer): Boolean;
    var
      TmpFileName, ExecStdout: string;
      ResultCode: integer;
    begin
      if CurPage = wpWelcome then
      begin
        TmpFileName := ExpandConstant('{tmp}') + '\~pid.txt';
        Exec('cmd.exe',
             '/C FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "0.0:80"`) DO '
               + '@tasklist /fi "pid eq %i" | find "%i" > "' + TmpFileName + '"', '', SW_HIDE,
             ewWaitUntilTerminated, ResultCode);
        if LoadStringFromFile(TmpFileName, ExecStdout) then
        begin
          MsgBox('Port 80 is used by '#13 + ExecStdout, mbInformation, MB_OK);
        end;
        DeleteFile(TmpFileName);
      end;
      Result := True;
    end;        
    
    0 讨论(0)
提交回复
热议问题