Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

как запустить/закрыть сторонее приложение на удаленном компе в ло   Найти похожие ветки 

 
MadHead ©   (2004-09-01 15:36) [0]

Собственно subj


 
Rouse_ ©   (2004-09-01 15:53) [1]

ЛО - это собственно что такое?
Ответ по существу - никак...


 
MadHead ©   (2004-09-01 15:58) [2]

ло - это была локальная сеть :) Ответ вводит в ступор:)


 
Digitman ©   (2004-09-01 16:07) [3]


> MadHead ©   (01.09.04 15:58) [2]


а ты не шибко жирно хочешь жить ? в произвольный стартовать/терминировать на ЧУЖОМ компе все что тебе взбрендится ?

чем, позволь уж полюбопытствовать, вызвана крайняя необходимость поиметь эту фичу ?


 
MadHead ©   (2004-09-01 16:11) [4]

кто сказал, что на чужом? я такого не говорил :) Фича, собственно для этого и нужна. Если коротко, то на локальных компах готовится материал, заливается на сервер, а на сервере надо запустить прогу, которая перегонит эти данные в базу.


 
Rouse_ ©   (2004-09-01 16:40) [5]

Раз так то делай таким образом.
На сервере постоянно крутится программа или сервис.
В расшареную папку ты сливаешь данные.
Посредством тех же майлслотов отправляешь некое уведомление этой программе при получении которого она сканирует нужную папку и добавляет данные в базу.

А вообщето для этого есть другие решения...


 
MadHead ©   (2004-09-01 18:08) [6]

Так эта программа у меня и так постоянно сканирует расшаренную папку. Мне надо ее перезапускать, что бы перечитать конфиг.

Решения есть и другие - это точно. Но хочется подельфить :)


 
Дмитрий Ботвин   (2004-09-02 08:02) [7]

Так конфиг можно читать не только при запуске, можешь по таймеру
это делать....


 
Дмитрий Ботвин   (2004-09-02 08:07) [8]

А вообще можно запускать и останавливать на удаленном компе
сервисы. Зарегистрируй свою прогу как сервис на удаленном компе,
а потом юзай его как хош.
Получаешь маркер доступа OpenSCManager, затем создаешь
сервис CreateService и хош запускай его, хош останавливай
(StartService и ControlService соответственно)


 
Rouse_ ©   (2004-09-02 09:32) [9]

Кстати, это самый оптимальный вариант ... :)


 
Дмитрий Ботвин   (2004-09-02 09:36) [10]

Я так и делал однажды, тока проблема одна есть. Во всяком случаи
у меня точно была. При каждом очередном запуске сервиса увеличивался объём занятой им оперативки, а при остановке нихрена
не освобождался. Хотя в проге я все деструкторы вызывал. Я так и
не понял в чём косяк :-)))


 
MadHead ©   (2004-09-02 11:02) [11]

Вариант может и оптимальный, только как эту прогу зарегистрировать как сервис, подскажите, плз.

Мне вот что показалось странным. У MS в Resourse Kit есть скрипт, написанный на vbs, который как раз и делает то что мне надо. Так неужели на vbs это можно сделать, а на Delphi нет?


 
Rouse_ ©   (2004-09-02 11:09) [12]

Так ты напиши ее как сервис...


 
MadHead ©   (2004-09-02 11:21) [13]

Так я же говорю - это сторонняя программа. Она уже написана.


 
Дмитрий Ботвин   (2004-09-02 12:05) [14]

По-моему, не обязательно писать её как сервис. Можно любую
прогу зарегистрить как службу. Служба - это лишь прога, которая
резидентно сидит в оперативки, а уж имеет она главную форму или
нет, я думаю не важно. А зарегистрить можно очень просто. Вот тебе примерный код:

procedure TForm2.Button5Click(Sender: TObject);
 var schSCManager,schService: DWORD;
     Path,ServiceName: String;
     Path_1,Path_2,lpBinaryPathName: PChar;
 begin
   ServiceName:="Моя служба";
   schSCManager:=OpenSCManager(PChar(Form1.CompName.Text), nil, SC_MANAGER_ALL_ACCESS);
   if schSCManager=0 then
     begin
       Application.MessageBox("Подключение не выполнено!","Ошибка подключения",
                             MB_OK+MB_ICONSTOP);
       Abort;
     end;
   try
     schService := OpenService(schSCManager, PChar(ServiceName),SERVICE_ALL_ACCESS);
     if schService<>0 then
       begin
         Application.MessageBox("Такая служба  уже существует!","Регистрация службы",
                             MB_OK+MB_ICONEXCLAMATION);
         exit;
       end;
     GetDir(0,Path);
     Path_1:=PChar(Path+"\MyService.exe");
     Path_2:=PChar("\\"+Form1.CompName.Text+"\Admin$\System32\MyService.exe");
     if CopyFile(Path_1,Path_2,false)=false then
        begin
          Application.MessageBox("Не могу скопировать MyService.exe","Ошибка копирования",
                             MB_OK+MB_ICONSTOP);
          exit;
        end;
     lpBinaryPathName:=PChar(""%windir%\System32\MyService.exe" /service");
     try
       if CreateService(schSCManager, PChar(ServiceName), PChar(ServiceName), SERVICE_ALL_ACCESS,
          SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, lpBinaryPathName,
          Nil, Nil, Nil, Nil, Nil)=0 then
          begin
            Application.MessageBox("Не могу создать службу MyService.exe!","Ошибка регистрации службы",
                             MB_OK+MB_ICONSTOP);
            exit;
          end
       else
          Application.MessageBox("Служба успешно создана!","Регистрация службы",
                             MB_OK+MB_ICONINFORMATION);
     finally
       CloseServiceHandle(schService);
     end;
   finally
     CloseServiceHandle(schSCManager);
   end;
 end;


 
Дмитрий Ботвин   (2004-09-02 12:22) [15]

Да, чуть не забыл, для того что бы это сделать, нужно иметь для текущего пользователя права администратора на том компе, на
котором ты пытаешься создать службу, иначе не подключишься :-)))


 
MadHead ©   (2004-09-02 12:39) [16]

to Дмитрий Ботвин
Спасибо - попробую...


 
MadHead ©   (2004-09-02 15:07) [17]

to Дмитрий Ботвин
С примером все хорошо - служба зарегилась, но не запускается - вылетает по тайм-ауту.


 
Дмитрий Ботвин   (2004-09-02 16:08) [18]

Ты её как запускаешь, напиши код....


 
Дмитрий Ботвин   (2004-09-02 16:13) [19]

Попробуй вот так запустить:

procedure TForm2.Button2Click(Sender: TObject);
 var schService,schSCManager: Dword;
     ServiceName: String;
     p: PChar;
 begin
   p := nil;
   ServiceName:="MyService";
   schSCManager := OpenSCManager(PChar(Form1.CompName.Text), nil, SC_MANAGER_ALL_ACCESS);
   if schSCManager=0 then
     begin
       Application.MessageBox("Подключение не выполнено!","Ошибка подключения",
                             MB_OK+MB_ICONSTOP);
       exit;
     end;
   try
     schService := OpenService(schSCManager, PChar(ServiceName),SERVICE_ALL_ACCESS);
     if schService=0 then
       begin
         Application.MessageBox("Не могу найти службу MyService!","Ошибка открытия службы",
                             MB_OK+MB_ICONSTOP);
         exit;
       end;
     try
       if StartService(schService,0,p)=false then
          Application.MessageBox("Не могу запустить
          службу!","Ошибка запуска , MB_OK+MB_ICONSTOP)
       else
          Application.MessageBox("Служба Myservice
          запущена!","Запуск службы", MB_OK+MB_ICONINFORMATION);
     finally
       CloseServiceHandle(schService);
     end;
   finally
     CloseServiceHandle(schSCManager);
   end;
end;


 
MadHead ©   (2004-09-02 17:32) [20]

to Дмитрий Ботвин

Так тоже не запускается - видимо дело все в этой сторонней программе. Не хочет она работать как служба.


 
DeadMeat ©   (2004-09-02 19:19) [21]

И не будет...
Ее надо переделать для этого...

---
...Death Is Only The Begining...


 
Rouse_ ©   (2004-09-02 21:55) [22]

Собственно а что вы хотели?
Чтобы обычная программа стала "вдруг откуда ни возьмись" реагировать на запросы SCM? А кто таблицу подготовит? А за связь с SCM кто отвечать будет?
Бред...


 
Дмитрий Ботвин   (2004-09-03 08:16) [23]

Самому писать видимо придётся службу....


 
MadHead ©   (2004-09-03 09:43) [24]

to Rouse_ ©
Собственно, хотел выяснить - получится или нет. Выяснил. Отрицательный результат - тоже результат. Так что никакого бреда в этом не усматриваю. Этот вопрос задал, потому что не знал на него ответа. Разве форум не для этого? :)

to Дмитрий Ботвин
Самому не получиться. Во-первых - знаний для этого у меня маловато. Во-вторых - программа эта является частью единой системы. То есть взаимодействие только через нее "родную" :)
Но, все равно, спасибо огромное за советы и примеры - очень пригодились.


 
Rouse_ ©   (2004-09-03 10:13) [25]

Бред я сказал по поводу попыток заставить обычную программу работать как сервис :)


 
MadHead ©   (2004-09-03 10:36) [26]

to Rouse_ ©
Как говорил наш "общий знакомый" - попытка-не пытка :). Тем более, что совсем недавно юзали утилиту, которая пытается запускать программы как службы. Правда там честно предупреждают, что это пройдет не со всеми (50%50). Так что шанс, наверное, был:)



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.059 c
14-1097956533
GuAV
2004-10-16 23:55
2004.11.07
винт FUJITSU MPG3204AT E и DMA


1-1098766873
samumka
2004-10-26 09:01
2004.11.07
И снова MDI (передача переменных)?


3-1096982070
DIS
2004-10-05 17:14
2004.11.07
Редактирование базы данных. (Paradox)


1-1098511623
ZiziPuk
2004-10-23 10:07
2004.11.07
Как быстро загружать ОЧЕНЬ большие файлы?


4-1095749888
secret
2004-09-21 10:58
2004.11.07
Как в “Delphi 6” поменять шрифт, в котором выводится надпись на з