Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.053 c
14-1097869017
zokzok
2004-10-15 23:36
2004.11.07
Перегрузка методов


4-1096670108
GanibalLector
2004-10-02 02:35
2004.11.07
PortMon


3-1097224039
Koala
2004-10-08 12:27
2004.11.07
Временные таблицы в Firebird 1.5.1


14-1098112036
Серый волк
2004-10-18 19:07
2004.11.07
Анонимные прокси


9-1089007632
dRake
2004-07-05 10:07
2004.11.07
TankMaze - первая демка!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский