Mad Mike
Гость
|
|
« Ответ #1 : 12-01-2005 20:21 » |
|
Вот кстати один из вариантов решения проблемы на Delphi.
program IB_reg;
uses Classes, Registry, Windows, SysUtils;
{$R *.RES}
Var reg:TRegistry; Services:String; Data:TStringList;
Function GetEnv(Const Name:String):String; Var EnvVar:Array [0..255] Of Char; Begin EnvVar:=#0; GetEnvironmentVariable(PChar(Name),EnvVar,SizeOf(EnvVar)); Result:=EnvVar; End;
Function ExtractEnvPath(S:String):String; Var j1,j2:integer; Begin //Поиск переменных окружения и составление //нормальных путей. j1:=Pos('%', S); While j1>0 Do Begin Delete(S,j1,1); j2:=Pos('%',S); if j2<>0 Then Begin Insert(GetEnv(Copy(S,j1,j2-j1)),S,j2+1); Delete(S,j1,1+j2-j1); End Else break; j1:=Pos('%', S); End; Result:=S; End;
Procedure RegisterIBPort; Var i:Integer; Begin For i:=0 to Data.Count - 1 do Begin IF Pos('gds_db',Data.Strings)<>0 Then Begin Data.Strings:='gds_db 3050/tcp'; Exit; End; End; Data.Add('gds_db 3050/tcp'); End;
Begin If Win32Platform=VER_PLATFORM_WIN32_NT Then Begin reg:=TRegistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; //Узнаём где находиться файл 'services' в NT это выглядит так; if reg.OpenKeyReadOnly('\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters')Then Begin Services:=ExtractEnvPath(reg.ReadString('DataBasePath')); reg.CloseKey; End; reg.Free; //В 9x всё определено. End Else Services:=ExtractEnvPath('%WinDir%'); Services:=Services+'\services'; //Загружаем 'services' в память. Data:=TStringList.Create; Data.LoadFromFile(Services); //Регистрируем порт. RegisterIBPort; //Сохраняем результат. Data.SaveToFile(Services); Data.Free; End.
|