Dialog based приложение превратить в сервис
От: rebus  
Дата: 26.06.04 08:58
Оценка:
Имею MFC приложение, состоящее из одного основного диалога и нескольких вспомогательных.
Приложение работает с ком портами и сокетами. Диалоги просто конфигурируют работу логики программы и иногда выводят состояние.
Необходимо без большой крови превратить это приложение в службу, чтоб оно запускалось до регистрации пользователя (в NT).
Также необходимо, чтобы приложение могло запускаться и не как служба (я так понимаю, подойдет передача параметров при запуске программы).

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

Реализацию задачи без интерактивной службы вижу следующей:
1. Создается простая служба со всей логикой работы приложения.
2. Создается exe файл, содержащий всю интерактивность.
3. 1 и 2 взаимодействуют между собой путем послания/приема сообщений (тут мне еще не до конца ясно через что они могут общаться — я плохо знаком со спецификой служб).

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


У кого какие идеи?

Буду рад помощи.
Re: Dialog based приложение превратить в сервис
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 26.06.04 09:12
Оценка:
В службе про диалоги можно забыть. Итнерактивные службы настойчиво не рекомендуют создавать (смотри MSDN). Поэтому данные лучше всего хранить в файле и читать при загрузке.

>В данном варианте остается неясным, каким образом приложение сможет работать и не как служба


Создайте две независимые программы

>Диалоги просто конфигурируют работу логики программы и иногда выводят состояние

>У кого какие идеи?

Посмотрите, пожалуйста, каким образом устроен Антивирус Касперского. Control Centre взаимодействует из сервисной частью. (например запуск и остановка службы мониторинга). Что мешает запускать модуль и подключатся через те же сокеты к службе и передавать или отображать данные.

На rsdn есть статья о создании служб, если не получится: burda_r@mail.ru
Любая задача имеет решение, даже когда решения не существует
Re[2]: Dialog based приложение превратить в сервис
От: Othello  
Дата: 26.06.04 09:34
Оценка:
> На rsdn есть статья о создании служб, если не получится: nospam@nospam
Статейка тут: [ulr=http://www.rsdn.ru/article/baseserv/services_details.xml
Автор(ы): Сергей Холодилов
Дата: 22.06.2003
В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.
]http://www.rsdn.ru/article/baseserv/services_details.xml
Автор(ы): Сергей Холодилов
Дата: 22.06.2003
В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.
[/url]
а если на MFC — то ещё я припоминаю нюанс: http://support.microsoft.com/default.aspx?scid=kb;en-us;164166
Posted via RSDN NNTP Server 1.8
Re[3]: Dialog based приложение превратить в сервис
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 26.06.04 10:08
Оценка:
Любая задача имеет решение, даже когда решения не существует
Re[4]: Dialog based приложение превратить в сервис
От: Othello  
Дата: 26.06.04 10:17
Оценка:
>
не сочтите за не уважение
просто немного дополнил Ваш ответ.
Posted via RSDN NNTP Server 1.8
Re[2]: Dialog based приложение превратить в сервис
От: rebus  
Дата: 26.06.04 13:19
Оценка:
Здравствуйте, Burd, Вы писали:

B>В службе про диалоги можно забыть. Итнерактивные службы настойчиво не рекомендуют создавать (смотри MSDN). Поэтому данные лучше всего хранить в файле и читать при загрузке.


А чем конкретно я рискую? Можно реальный пример того, что может плохого случиться? Из MSDN я это так и не понял... то что не очень хорошо видеть кучу окошек во время входа в систему это ясно и мне это не нужно, но ведь я могу и не показывать свой диалог, пока кто-нибудь не залогиниться.

>>В данном варианте остается неясным, каким образом приложение сможет работать и не как служба


B>Создайте две независимые программы


Не самый удачный вариант. В случае изменения функционала придется менять исходники в двух местах... хотя наверное на этом и остановлюсь, если никто не предложит других вариантов (попробую проиграться с #ifdef... в программе с основной логикой).

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


>>Диалоги просто конфигурируют работу логики программы и иногда выводят состояние

>>У кого какие идеи?

B>Посмотрите, пожалуйста, каким образом устроен Антивирус Касперского. Control Centre взаимодействует из сервисной частью. (например запуск и остановка службы мониторинга). Что мешает запускать модуль и подключатся через те же сокеты к службе и передавать или отображать данные.


Ничто не мешает, кроме как навязчивая мысль, что можно сделать проще...
Проще нужно потому, что придеться еще 4 проекта переделывать под службу, логика которых еще сложнее...

B>На rsdn есть статья о создании служб, если не получится: burda_r@mail.ru


Все статьи я пересмотрел ранее, к решению моей задачи они меня не продвинули ни на шаг.
Мне бы примерчик службы с интерактивностью и пример приложения, состоящего из одного exe файла — работающие как служба и как обычное приложение, чтоб увидеть как проще все сделать... на сайте удалось найти ссылку на пример интерактивной службы от Alex Fedotov здесь (топик
Автор: -lexa-
Дата: 14.03.02
), но примера там видимо уже давно нет (ссылка мертвая).
Re[3]: Dialog based приложение превратить в сервис
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 26.06.04 13:33
Оценка:
R>Мне бы ... пример приложения, состоящего из одного exe файла — работающие как служба и как обычное приложение,


void main(int argc, char** argv )
{
  if ( argv != 2 )
     return;
  if ( strcmp( argv[1], "Служба" )
  {
     if ( !::StartServiceCtrlDispatcher( DispatchTable ) ) 
     { 
      ::ShowErrorMessage();
     }
  }
  else
     ::MessageBox( NULL, "Это не служба", "Info", MB_ICONINFORMATION );
}
Любая задача имеет решение, даже когда решения не существует
Re[4]: Dialog based приложение превратить в сервис
От: rebus  
Дата: 26.06.04 15:04
Оценка:
Здравствуйте, Burd, Вы писали:

R>>Мне бы ... пример приложения, состоящего из одного exe файла — работающие как служба и как обычное приложение,



B>
B>void main(int argc, char** argv )
B>{
B>  if ( argv != 2 )
B>     return;
B>  if ( strcmp( argv[1], "Служба" )
B>  {
B>     if ( !::StartServiceCtrlDispatcher( DispatchTable ) ) 
B>     { 
B>      ::ShowErrorMessage();
B>     }
B>  }
B>  else
B>     ::MessageBox( NULL, "Это не служба", "Info", MB_ICONINFORMATION );
B>}

B>


Давайте будем посерьезнее, а не отвечать ради ответа...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.