powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как из Delphi запускать и останавливать cache
12 сообщений из 12, страница 1 из 1
Как из Delphi запускать и останавливать cache
    #37080974
elena_vlz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Мне нужно из-под Delphi остановить, а потом запустить cache. Знаю, что для этого есть cstart.exe и cstop.exe.
1. с какими ключами их запускать, чтобы от каше не было лишних вопросов (действительно ли вы хотите остановить каше)?
2. как в Delphi понять, что каше действительно остановился и действительно запустился?
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37081003
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для этого можно останавливать и запускать службу каше, нужно только определить какую,
это не сложно определить
имя службы которое нужно останавливать, можно составить из слова Cache и пути к установленной конфигурации

в итоге получаем например такое имя службы
Cache_c-_intersystems_ensemble
в пути меняем ":" на "-", и "\" на "_"

узнать установленные конфигурации и пути к ним можно в реестре в ветке
HKEY_LOCAL_MACHINE\SOFTWARE\InterSystems\Cache\Configurations
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37081050
elena_vlz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дим, а пример с запуском службы можешь выложить?
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37081079
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я в АИРе делал, службу для остановки и запуска Cache по сети CacheControl
могу приложить куски кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
 // определение имени службы по первой попавшейся конфигурации 
 function  TAirCacheControlService.ServName:  string ;
 var 
  reg: TRegistry;
  keys: tstringList;
  pis,str:  string ;
 begin 
  reg:= TRegistry.Create();
  reg.RootKey:= HKEY_LOCAL_MACHINE;
  pis:= '\SOFTWARE\InterSystems\Cache\Configurations\';
  reg.OpenKey(pis,false);
  keys:= TStringList.Create;
  reg.GetKeyNames(keys);
  reg.OpenKey(pis+keys.Strings[ 0 ]+'\Directory',false);
  str:= reg.ReadString('');
  str:= LowerCase(str);
  str:=stringReplace(str,'\','_',[rfReplaceAll]);
  str:=stringReplace(str,':','-',[rfReplaceAll]);
  result:= 'Cache_'+str;
  reg.Free;
 end ;

 // старт службы 
 function  CServiceStart(aMachine, aServiceName:  string  ): boolean;
 // aMachine это UNC путь, либо локальный компьютер если пусто 
 var 
  h_manager,h_svc: SC_Handle;
  svc_status: TServiceStatus;
  Temp: PChar;
  dwCheckPoint: DWord;
 begin 

  svc_status.dwCurrentState :=  1 ;
  h_manager := OpenSCManager(PChar(aMachine),  nil , SC_MANAGER_CONNECT);
   if  h_manager >  0   then 
   begin 
    h_svc := OpenService(h_manager, PChar(aServiceName),
    SERVICE_START  or  SERVICE_QUERY_STATUS);
     if  h_svc >  0   then 
     begin 
      temp :=  nil ;
       if  (StartService(h_svc, 0 ,temp))  then 
         if  (QueryServiceStatus(h_svc,svc_status))  then 
         begin 
           while  (SERVICE_RUNNING <> svc_status.dwCurrentState)  do 
           begin 
            dwCheckPoint := svc_status.dwCheckPoint;
            Sleep(svc_status.dwWaitHint);
             if  ( not  QueryServiceStatus(h_svc,svc_status))  then 
              break;
             if  (svc_status.dwCheckPoint < dwCheckPoint)  then 
             begin 
               // QueryServiceStatus не увеличивает dwCheckPoint 
              break;
             end ;
           end ;
         end ;
      CloseServiceHandle(h_svc);
     end ;
    CloseServiceHandle(h_manager);
   end ;
  Result := SERVICE_RUNNING = svc_status.dwCurrentState;
 end ;

 // остановка службы 
 function  CServiceStop(aMachine,aServiceName:  string  ): boolean;
 // aMachine это UNC путь, либо локальный компьютер если пусто 
 var 
  h_manager, h_svc: SC_Handle;
  svc_status: TServiceStatus;
  dwCheckPoint: DWord;
 begin 
  h_manager:=OpenSCManager(PChar(aMachine), nil , SC_MANAGER_CONNECT);
   if  h_manager >  0   then 
   begin 
    h_svc := OpenService(h_manager,PChar(aServiceName),
    SERVICE_STOP  or  SERVICE_QUERY_STATUS);
     if  h_svc >  0   then 
     begin 
       if (ControlService(h_svc,SERVICE_CONTROL_STOP, svc_status)) then 
       begin 
         if (QueryServiceStatus(h_svc,svc_status)) then 
         begin 
           while (SERVICE_STOPPED <> svc_status.dwCurrentState) do 
           begin 
            dwCheckPoint := svc_status.dwCheckPoint;
            Sleep(svc_status.dwWaitHint);
             if ( not  QueryServiceStatus(h_svc,svc_status)) then 
             begin 
               // couldn`t check status 
              break;
             end ;
             if (svc_status.dwCheckPoint < dwCheckPoint) then 
              break;
           end ;
         end ;
       end ;
      CloseServiceHandle(h_svc);
     end ;
    CloseServiceHandle(h_manager);
   end ;
  Result := SERVICE_STOPPED = svc_status.dwCurrentState;
 end ;

 // статус службы 
 function  ServiceGetStatus(sMachine, sService:  string  ): DWord;
 var 
  h_manager, h_svc: SC_Handle;
  service_status: TServiceStatus;
  hStat: DWord;
 begin 
  hStat :=  1 ;
  h_manager := OpenSCManager(PChar(sMachine) , nil , SC_MANAGER_CONNECT);
   if  h_manager >  0   then 
   begin 
    h_svc := OpenService(h_manager,PChar(sService), SERVICE_QUERY_STATUS);
     if  h_svc >  0   then 
     begin 
       if (QueryServiceStatus(h_svc, service_status))  then 
        hStat := service_status.dwCurrentState;
      CloseServiceHandle(h_svc);
     end ;
    CloseServiceHandle(h_manager);
   end ;
  Result := hStat;
 end ;

 procedure  TAirCacheControlService.CacheRestart;
 begin 
  CacheStop();
  CacheStart();
 end ;

 procedure  TAirCacheControlService.CacheStart;
 begin 
  CServiceStart('', servcache)
 end ;

 procedure  TAirCacheControlService.CacheStop;
 begin 
  CServiceStop('', servcache)
 end ;

...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37081679
elena_vlz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor, большое спасибо! В методе CacheStop servcache - это имя каше? Обычная строка?
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37081937
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servcache, это результат функции ServName()
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37082384
elena_vlz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor, большое спасибо!!! Все получилось.
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37085256
misha_shar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
elena_vlz,

Мне надо было перед запуском моей программы запускать CACHE я в BAT файле запускал сначала CACHE а затем свою программу,
а затем после завершения своей программы останавливал CACHE.
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37085291
misha_shar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor у меня трансляция не прошла. Какие модули подключаешь? Что такое SC_Handle, TServiceStatus?
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37085480
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
misha_shar,

у меня под рукой нету Delphi,
Код: plaintext
1.
2.
3.
4.
 uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  WinSvc, Registry, ExtCtrls, IdBaseComponent, IdComponent, IdCustomTCPServer,
  IdTCPServer, inifiles, IdIntercept, IdLogBase, IdLogFile, IdContext;
полагаю дело в этом модуле WinSvc
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37085757
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
misha_sharМне надо было перед запуском моей программы запускать CACHE
У нас запуск программы никак не связан со стартом Каше, т.ч. твой "вариант" нам не подойдёт...
...
Рейтинг: 0 / 0
Как из Delphi запускать и останавливать cache
    #37090191
misha_shar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все получилось Спасибо! Долго не мог найти как это сделать.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как из Delphi запускать и останавливать cache
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]