Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-07-2024
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 293
Poder: 3
pgranados Va por buen camino
Crear regla de entrada en Windows para Firebird 2.5

Hola, tengo una aplicación que utiliza Firebird 2.5 pero me he topado que con algunas computadoras tengo que crear una regla de entrada para el puerto 3050 para que funcione la base de datos.

Hay algun procedimiento o función en Delphi para crear esta regla en automatico (si es que no existe) en Windows?

Saludos
Responder Con Cita
  #2  
Antiguo 09-07-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.193
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Te refieres al firewall?
Algo así:
Código Delphi [-]
uses
  Winapi.Windows, Winapi.ShellAPI, System.SysUtils;

procedure AddFirewallRule;
var
  Command: string;
begin
  // Comando para agregar una regla al firewall de Windows
  Command := 'netsh advfirewall firewall add rule name="Firebird 3050" dir=in action=allow protocol=TCP localport=3050';

  // Ejecutar el comando usando ShellExecute
  ShellExecute(0, 'open', 'cmd.exe', PChar('/C ' + Command), nil, SW_HIDE);
end;

begin
  try
    AddFirewallRule;
    Writeln('Regla de firewall añadida.');
  except
    on E: Exception do
      Writeln('Error: ', E.Message);
  end;
end.
Responder Con Cita
  #3  
Antiguo 09-07-2024
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 297
Poder: 8
manelb Va por buen camino
Nosotros lo hacemos con un fichero .bat al realizar la instalación

Código:
netsh advfirewall firewall add rule name="Microdelta - Firebird (puerto)" dir=in action=allow protocol=TCP localport=3050
netsh advfirewall firewall add rule name="Microdelta - Firebird (fbguard)" dir=in action=allow program="C:\Program Files (x86)\Firebird\Firebird_2_1\bin\fbguard.exe" enable=yes
netsh advfirewall firewall add rule name="Microdelta - Firebird (fbserver)" dir=in action=allow program="C:\Program Files (x86)\Firebird\Firebird_2_1\bin\fbserver.exe" enable=yes
Responder Con Cita
  #4  
Antiguo 18-07-2024
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 293
Poder: 3
pgranados Va por buen camino
Gracias por sus aportes, al final utilice el procedimiento de Casimiro y con ayuda de GPT lo modifique un poco para que la regla se cree solo cuando no exista.

Código Delphi [-]

procedure AgregarFirewallFirebird;
var
  Command, CheckCommand: string;
  OutputLines: TStringList;
  ShellOutput: string;
  SecurityAttributes: TSecurityAttributes;
  StdOutRead, StdOutWrite: THandle;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  BytesRead: DWORD;
  Buffer: array[0..255] of AnsiChar;
  i:integer;
begin
  CheckCommand := 'netsh advfirewall firewall show rule name="REGLA 3050"';
  Command := 'netsh advfirewall firewall add rule name="REGLA 3050" dir=in action=allow protocol=TCP localport=3050';
  OutputLines := TStringList.Create;

  try
    ZeroMemory(@SecurityAttributes, SizeOf(SecurityAttributes));
    SecurityAttributes.nLength := SizeOf(SecurityAttributes);
    SecurityAttributes.bInheritHandle := TRUE;

    if not CreatePipe(StdOutRead, StdOutWrite, @SecurityAttributes, 0) then
      RaiseLastOSError;

    try
      ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
      StartupInfo.cb := SizeOf(StartupInfo);
      StartupInfo.hStdOutput := StdOutWrite;
      StartupInfo.hStdError := StdOutWrite;
      StartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := SW_HIDE;

      ZeroMemory(@ProcessInfo, SizeOf(ProcessInfo));

      if CreateProcess(nil, PChar('cmd.exe /C ' + CheckCommand), nil, nil, TRUE, CREATE_NO_WINDOW, nil, nil, StartupInfo, ProcessInfo) then
      begin
        CloseHandle(StdOutWrite);

        repeat
          BytesRead := 0;
          ReadFile(StdOutRead, Buffer, SizeOf(Buffer) - 1, BytesRead, nil);
          Buffer[BytesRead] := #0;
          ShellOutput := ShellOutput + String(Buffer);
        until BytesRead = 0;

        WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
      end;

      OutputLines.Text := ShellOutput;

      i:= Pos('REGLA 3050', OutputLines.Text);
      if i = 0 then
        ShellExecute(0, 'open', 'cmd.exe', PChar('/C ' + Command), nil, SW_HIDE);

    finally
      CloseHandle(StdOutRead);
    end;

  finally
    OutputLines.Free;
  end;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FireWall Windows Defender - Reglas de Entrada Combat-F2D Seguridad 2 28-06-2019 10:15:29
Crear una consola de administración (msc) para Windows fide_uci API de Windows 5 13-04-2011 19:00:32
añadir una entrada de registro a windows mancurnino Varios 2 18-05-2008 02:12:43
Crear una Aplicacion para Windows CE geraldvlady .NET 3 22-02-2008 23:29:24
como crear fonts para windows? Citlalli Varios 1 24-11-2006 02:30:48


La franja horaria es GMT +2. Ahora son las 10:16:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi