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

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

узнать установленные конфигурации и пути к ним можно в реестре в ветке
HKEY_LOCAL_MACHINE\SOFTWARE\InterSystems\Cache\Configurations
...
Рейтинг: 0 / 0
27.01.2011, 10:31
    #37081050
elena_vlz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
Дим, а пример с запуском службы можешь выложить?
...
Рейтинг: 0 / 0
27.01.2011, 10:45
    #37081079
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
я в АИРе делал, службу для остановки и запуска 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
27.01.2011, 13:28
    #37081679
elena_vlz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
DAiMor, большое спасибо! В методе CacheStop servcache - это имя каше? Обычная строка?
...
Рейтинг: 0 / 0
27.01.2011, 14:28
    #37081937
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
servcache, это результат функции ServName()
...
Рейтинг: 0 / 0
27.01.2011, 16:28
    #37082384
elena_vlz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
DAiMor, большое спасибо!!! Все получилось.
...
Рейтинг: 0 / 0
28.01.2011, 19:13
    #37085256
misha_shar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
elena_vlz,

Мне надо было перед запуском моей программы запускать CACHE я в BAT файле запускал сначала CACHE а затем свою программу,
а затем после завершения своей программы останавливал CACHE.
...
Рейтинг: 0 / 0
28.01.2011, 19:38
    #37085291
misha_shar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
DAiMor у меня трансляция не прошла. Какие модули подключаешь? Что такое SC_Handle, TServiceStatus?
...
Рейтинг: 0 / 0
28.01.2011, 23:05
    #37085480
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
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
29.01.2011, 09:43
    #37085757
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
misha_sharМне надо было перед запуском моей программы запускать CACHE
У нас запуск программы никак не связан со стартом Каше, т.ч. твой "вариант" нам не подойдёт...
...
Рейтинг: 0 / 0
01.02.2011, 11:51
    #37090191
misha_shar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из Delphi запускать и останавливать cache
Все получилось Спасибо! Долго не мог найти как это сделать.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как из Delphi запускать и останавливать cache / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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