sql >> データベース >  >> RDS >> Mysql

リスニングポートによるLAN上のMySQLサーバーの検出(Inno Setup)

    サーバーがポートをリッスンしているかどうかを確認するには、 Winsock OLEコントロール

    type
      TSocketState =
        (sckClosed, sckOpen, sckListening, sckConnectionPending, sckResolvingHost,
         sckHostResolved, sckConnecting, sckConnected, sckClosing, sckError);
    
    type
      TMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
      end;
    
    const
      PM_REMOVE = 1;
    
    function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax,
      wRemoveMsg: UINT): BOOL; external '[email protected] stdcall';
    function TranslateMessage(const lpMsg: TMsg): BOOL;
      external '[email protected] stdcall';
    function DispatchMessage(const lpMsg: TMsg): Longint;
      external '[email protected] stdcall';
    
    procedure AppProcessMessage;
    var
      Msg: TMsg;
    begin
      while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
      begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
    end;
    
    function CheckPort(Host: string; Port: Integer): Boolean;
    var
      Socket: Variant;
    begin
      Socket := CreateOleObject('MSWinsock.Winsock');
      Socket.RemoteHost := Host;
      Socket.RemotePort := Port;
      Socket.Connect;
    
      { Winsock requires message pumping }
      while not (Socket.State in [sckConnected, sckError]) do 
      begin
        AppProcessMessage;
      end;
    
      Result := (Socket.State = sckConnected);
    
      if Result then
      begin
        Log(Format('Port %d on %s is open', [Port, Host]));
      end
        else
      begin
        Log(Format('Port %d on %s is NOT open', [Port, Host]));
      end;
      Socket.Close;
    end;
    

    Winsockに注意してください 制御にはメッセージキューのポンピングが必要です。そのため、ユーザーがフォームをいじらないように、チェックを実行する前にウィザードを無効にする必要がある場合があります。

    クレジット:AppProcessMessage InnoSetupUIをブロックせずに7zipを実行する方法



    1. SQLバイナリデータ型で操作を実行するにはどうすればよいですか?

    2. 同じアプリケーション、異なるデータベース:Entity Framework 6.X + MySQL + SQL Server

    3. 正規表現とpreg_matchを使用して、類似の文字列を検索して置換します

    4. MySQL:連続注文ポジション