Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Console & Service Application 
:(
    Опции темы
sl8er
Дата 21.6.2011, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.6.2007

Репутация: нет
Всего: нет



Добрый день.

Стоит задача написать консольное приложение, которое должно иметь возможность установки как службы Windows. 
Нет проблем с написанием Console Application и Service Application, но в отдельности. Возможно ли как-то совместить их в одном проекте?
PM MAIL   Вверх
CodeMonkey
Дата 21.6.2011, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Можно попробовать. Но не уверен, что будет работать. 

А в чём проблема проверить-то? Берёте service-приложение, да меняете его тип на консольку.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
sl8er
Дата 21.6.2011, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.6.2007

Репутация: нет
Всего: нет



По заданию необходимо чтобы это было одно приложение, а не два
PM MAIL   Вверх
500mhz
Дата 21.6.2011, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



вот

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  beepserv.zip 21,47 Kb


--------------------

PM MAIL ICQ   Вверх
500mhz
Дата 21.6.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



поэксперементировал = сервисы с консолью не могут работать

но мсдн говорит
Цитата

В большинстве случаев службам запрещено взаимодействие с консолью или рабочим столом пользователей (как локальных, так и удалённых), однако для некоторых сервисов возможно исключение — взаимодействие с консолью (сессией с номером 0, в которой зарегистрирован пользователь локально или при запуске службы mstsc с ключом /console).



--------------------

PM MAIL ICQ   Вверх
CodeMonkey
Дата 21.6.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(sl8er @  21.6.2011,  09:25 Найти цитируемый пост)
По заданию необходимо чтобы это было одно приложение, а не два 


Это вы к чему? А я что предлагаю? Меняете тип сервиса на консольную программу. Вот вам ваше "одно приложение". Что не так?

Цитата(500mhz @  21.6.2011,  17:39 Найти цитируемый пост)
поэксперементировал = сервисы с консолью не могут работать


Да вроде автор про это и не спрашивал. Если я правильно понял, он хочет один .exe пускать в двух режимах: как консоль (запускаемую как обычно) и как службу.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
500mhz
Дата 21.6.2011, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



CodeMonkey
значит я не так понял автора )
в таком случае то что он хочет спокойно реализуемо


--------------------

PM MAIL ICQ   Вверх
Akella
Дата 21.6.2011, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Можно ведь написать обычное приложение и установить его в винде как службу? При установке указать нужные параметры, типа там Разрешить взаимодействие с Рабочим столом и т.д.
PM MAIL   Вверх
kami
Дата 21.6.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(Akella @  21.6.2011,  20:39 Найти цитируемый пост)
Можно ведь написать обычное приложение и установить его в винде как службу?

Нельзя. Сервис при запуске должен зарегистрировать (RegisterServiceCtrlHandler) свою процедуру Handler (или HandlerEx, но это уже нужно немного поизвращаться). Это действо производит TServiceApplication. Обычное приложение (тем более - консольное) такого не делает.

Я делал переключаемое GUI<->Service приложение.

Это выглядело как-то так (применительно к консольному, думаю, америку не открою):
in ???.dpr :
Код

begin
  if StartAsService then
    begin
      Application.Initialize;
      Application.CreateForm(TService1, Service1);
      Application.Run;
    end
  else
    begin
      // тут - код запуска консольного приложения.
    end;
end;


StartAsService может вычисляться, например, по параметру командной строки т.к. при установке службы допускается задавать на запуск всякие ParamStr.

Само собой - вся логика должна быть не в dpr, а в общих для обоих типов запуска программы модулях. Кроме того, не нужно забывать, что в Vista и Win7 интерактивные службы запрещены, так что о всяких MessageBox, иконках в трее, перечислении окон на рабочем столе и всего прочего, что касается визуального отображения, нужно ЗАБЫТЬ.
PM MAIL WWW   Вверх
CodeMonkey
Дата 21.6.2011, 21:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(Akella @  21.6.2011,  21:39 Найти цитируемый пост)
Можно ведь написать обычное приложение и установить его в винде как службу?


Помню, когда я был ещё зелёным, то пробовал поставить на скринсейвер 95-й Винды графическую прогу на Турбо Паскале.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
500mhz
Дата 21.6.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



яж сорцы выложил для кого? )))


--------------------

PM MAIL ICQ   Вверх
sl8er
Дата 22.6.2011, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.6.2007

Репутация: нет
Всего: нет



Понял. Всем спасибо
PM MAIL   Вверх
sl8er
Дата 27.6.2011, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.6.2007

Репутация: нет
Всего: нет



Цитата(kami @ 21.6.2011,  21:02)
Цитата(Akella @  21.6.2011,  20:39 Найти цитируемый пост)
Можно ведь написать обычное приложение и установить его в винде как службу?

Нельзя. Сервис при запуске должен зарегистрировать (RegisterServiceCtrlHandler) свою процедуру Handler (или HandlerEx, но это уже нужно немного поизвращаться). Это действо производит TServiceApplication. Обычное приложение (тем более - консольное) такого не делает.

Я делал переключаемое GUI<->Service приложение.

Это выглядело как-то так (применительно к консольному, думаю, америку не открою):
in ???.dpr :
Код

begin
  if StartAsService then
    begin
      Application.Initialize;
      Application.CreateForm(TService1, Service1);
      Application.Run;
    end
  else
    begin
      // тут - код запуска консольного приложения.
    end;
end;


StartAsService может вычисляться, например, по параметру командной строки т.к. при установке службы допускается задавать на запуск всякие ParamStr.

Само собой - вся логика должна быть не в dpr, а в общих для обоих типов запуска программы модулях. Кроме того, не нужно забывать, что в Vista и Win7 интерактивные службы запрещены, так что о всяких MessageBox, иконках в трее, перечислении окон на рабочем столе и всего прочего, что касается визуального отображения, нужно ЗАБЫТЬ.

Код

if not Application.DelayInitialize or Application.Installing then Application.Initialize;

ругается, т.к. в консольном варианте Application не является TServiceApplication.

Можно ли динамически создавать Application?

Логика вынесена в отдельный класс. В консоли/сервисе нужно только его создать. Но не получается
PM MAIL   Вверх
500mhz
Дата 27.6.2011, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



что за бред? дельфятники пора уже и абстрагироваться от своих TServiceApplication ))))

в самом начале делаем StartServiceCtrlDispatcher если возврашает 0 то мы явно не сервис, если не 0 то сервис.


--------------------

PM MAIL ICQ   Вверх
sl8er
Дата 27.6.2011, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 14.6.2007

Репутация: нет
Всего: нет



Цитата(500mhz @ 27.6.2011,  08:17)
в самом начале делаем StartServiceCtrlDispatcher если возврашает 0 то мы явно не сервис, если не 0 то сервис.

Так это я должен сказать приложению, как ему стартовать.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0805 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.