如何检查端口在Inno Setup中是否可用?

时间:2014-02-11 12:27:08

标签: inno-setup pascalscript

我需要检查一些端口是否可用?如何在Inno Setup中做到这一点? 有没有办法在Inno Setup中使用socket?这有什么图书馆吗?如果有可以导入并使用它?

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

如果端口可用,您可以使用我的功能检查:

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;

答案 1 :(得分:0)

返回(在MsgBox中)使用端口80的服务或程序的函数。 如果输出为空,则不会显示MsgBox。

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;