Ada_Ru форум

Обсуждение языка Ада

Какую библиотеку лучше использовать для работы с внешними приложениеми?

Оставить новое сообщение

Сообщения

Ivan Kohan
Какую библиотеку лучше использовать для работы с внешними приложениеми?
2009-11-29 10:52:52

Добрый день уважаемые коллеги.

 

Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):

а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);

б) остановить другое приложение работающее на этом же сервере; в) получить информацию о том, запущено или нет в данный момент некоторое приложение.

 

Несколько слов о том, как возникла такая необходимость.

В данный момент на хостинге расположен AWS сервер main.exe

Я постоянно вношу обновления и поэтому каждый раз необходимо останавливать сервер main.exe, перезаливать новую версию и снова его запускать.

При этом каждый раз мне приходиться просить администратора остановить и заново запустить main.exe.

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

 

На сервере будут работать одновременно два AWS сервера - один admin.exe а другой main.exe (порты они слушают разные).

 

При этом admin.exe будет управлять запуском и остановкой main.exe Таким образом я получу панель для удаленного управления своим AWS сервером main.exe.

 

К сожалению я не нашел среди набора функций пакета Ada.Command_Line тех функций, которые могут решить эти задачи.

 

Буду очень благодарен за помощь. Спасибо!

 

С уважением,

Иван

Ivan Kohan wrote:

 

Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):

а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);

б) остановить другое приложение работающее на этом же сервере;

в) получить информацию о том, запущено или нет в данный момент

некоторое приложение.

 

Стандартными средствами такое наверное не сделать. Слишком уж механизмы запуска остановки приложений отличаются на разных платформах. Раз речь идёт о MS Windows, то начать наверное стоит с пакета Win32Ada; и если там не будет готовых средств - писать собственную связку к WinAPI.

 

День добрый!

Если под MS Windows то самый простой вариант в файле архива.

 

With best regards

Sergey Kirkorov www.mediascan.by

Email: ksiby@...

----- Original Message -----

From: Ivan Kohan

To: ada_ru@yahoogroups.com

Sent: Thursday, October 29, 2009 12:52 PM

Subject: [ada_ru] Какую библиотеку лучше использовать для работы с внешними приложениеми?

 

 

Добрый день уважаемые коллеги.

 

Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):

а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);

б) остановить другое приложение работающее на этом же сервере; в) получить информацию о том, запущено или нет в данный момент некоторое приложение.

 

Несколько слов о том, как возникла такая необходимость.

В данный момент на хостинге расположен AWS сервер main.exe

Я постоянно вношу обновления и поэтому каждый раз необходимо останавливать сервер main.exe, перезаливать новую версию и снова его запускать.

 

При этом каждый раз мне приходиться просить администратора остановить и заново запустить main.exe.

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

 

На сервере будут работать одновременно два AWS сервера - один admin.exe а другой main.exe (порты они слушают разные).

 

При этом admin.exe будет управлять запуском и остановкой main.exe Таким образом я получу панель для удаленного управления своим AWS сервером main.exe.

 

К сожалению я не нашел среди набора функций пакета Ada.Command_Line тех функций, которые могут решить эти задачи.

 

Буду очень благодарен за помощь. Спасибо!

 

С уважением,

Иван

 

а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);

б) остановить другое приложение работающее на этом же сервере;

в) получить информацию о том, запущено или нет в данный момент некоторое приложение.

 

При этом admin.exe будет управлять запуском и остановкой main.exe

Таким образом я получу панель для удаленного управления своим AWS сервером main.exe.

Запустить можно чем-то вроде system("./main.exe"), правда слэш должен быть ровно такой какой используется в системе. т.е. в винде это будет обратный слэш. system(".\main.exe");

(полагаю аналог system в Аде таки есть).

 

Остановить своё же приложение разве нельзя просто послав ему по тому чеж tcp что-нибудь вроде "закройся!"? В оном main.exe сделать отдельный поток который будет пасти это сообщение и всё. По приходу убивает всех остальных и убивает себя сам.

 

Соответственно получить информацию о том запущено ли приложение можно просто послав не "закройся" а какой-нибудь "ping" тому же main.exe (в ответ должен прийти "pong"), который отработает тот же поток что и в предудыщем абзаце. + можно же ж попробовать прибиндиться к тому же tcp-порту что и main.exe (80-ый порт небось, коль AWS), если система скажет -- фигвам, значит main.exe за него уже схватился, а значит запустился.

On Thu, 29 Oct 2009 12:52:52 +0200, you wrote:

 

Добрый день уважаемые коллеги.

 

Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):

а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);

б) остановить другое приложение работающее на этом же сервере;

в) получить информацию о том, запущено или нет в данный момент некоторое приложение.

 

1. Под Gtk есть системно-независимый запуск процессов с pipe-ами. Не очень здорово сделан, но работает. В GtkAda его нет, но я сделал поддержку, см. здесь

 

http://www.dmitry-kazakov.de/ada/gtkada_contributions.htm

 

2. В GNAT библиотеке есть рудиментарная поддержка запуска - ожидания, но без "пипсов". См. System.OS_Lib.

 

Остановить, опросить нельзя. Можно ждать окончания. Так что придется делать интерфейс - через "пипсы" или multi-cast сокеты типа - "я тут, кто еще?" между процессами участниками.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Уважаемые коллеги, большое спасибо за помощь!

Теперь на выходных смогу выбрать оптимальное решение и реализую его.

С уважением,

Иван

 

29 октября 2009 г. 15:39 пользователь Dmitry A. Kazakov <

alt@dmitry-kazakov.de> написал:

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти