Имею MFC приложение, состоящее из одного основного диалога и нескольких вспомогательных.
Приложение работает с ком портами и сокетами. Диалоги просто конфигурируют работу логики программы и иногда выводят состояние.
Необходимо без большой крови превратить это приложение в службу, чтоб оно запускалось до регистрации пользователя (в NT).
Также необходимо, чтобы приложение могло запускаться и не как служба (я так понимаю, подойдет передача параметров при запуске программы).
Возможно, необходимо копать в сторону интерактивных служб, если у кого есть пример — поделитесь пожалуйста.
Реализацию задачи без интерактивной службы вижу следующей:
1. Создается простая служба со всей логикой работы приложения.
2. Создается exe файл, содержащий всю интерактивность.
3. 1 и 2 взаимодействуют между собой путем послания/приема сообщений (тут мне еще не до конца ясно через что они могут общаться — я плохо знаком со спецификой служб).
В данном варианте остается неясным, каким образом приложение сможет работать и не как служба... да и крови с переносом логики работы, очень много будет
У кого какие идеи?
Буду рад помощи.
В службе про диалоги можно забыть. Итнерактивные службы настойчиво не рекомендуют создавать (смотри MSDN). Поэтому данные лучше всего хранить в файле и читать при загрузке.
>В данном варианте остается неясным, каким образом приложение сможет работать и не как служба
Создайте две независимые программы
>Диалоги просто конфигурируют работу логики программы и иногда выводят состояние
>У кого какие идеи?
Посмотрите, пожалуйста, каким образом устроен Антивирус Касперского. Control Centre взаимодействует из сервисной частью. (например запуск и остановка службы мониторинга). Что мешает запускать модуль и подключатся через те же сокеты к службе и передавать или отображать данные.
На rsdn есть статья о создании служб, если не получится: burda_r@mail.ru
> 
не сочтите за не уважение

просто немного дополнил Ваш ответ.
Posted via RSDN NNTP Server 1.8
Здравствуйте, Burd, Вы писали:
B>В службе про диалоги можно забыть. Итнерактивные службы настойчиво не рекомендуют создавать (смотри MSDN). Поэтому данные лучше всего хранить в файле и читать при загрузке.
А чем конкретно я рискую? Можно реальный пример того, что может плохого случиться? Из MSDN я это так и не понял... то что не очень хорошо видеть кучу окошек во время входа в систему это ясно и мне это не нужно, но ведь я могу и не показывать свой диалог, пока кто-нибудь не залогиниться.
>>В данном варианте остается неясным, каким образом приложение сможет работать и не как служба
B>Создайте две независимые программы
Не самый удачный вариант. В случае изменения функционала придется менять исходники в двух местах... хотя наверное на этом и остановлюсь, если никто не предложит других вариантов (попробую проиграться с #ifdef... в программе с основной логикой).
В голову пришла идея реализовать все в одном exe (т.е. службу и обычную программу, которая, в случае если служба запущена, будет работать просто как конфигуратор службы) ... сейчас пытаюсь продумать реализацию.
>>Диалоги просто конфигурируют работу логики программы и иногда выводят состояние
>>У кого какие идеи?
B>Посмотрите, пожалуйста, каким образом устроен Антивирус Касперского. Control Centre взаимодействует из сервисной частью. (например запуск и остановка службы мониторинга). Что мешает запускать модуль и подключатся через те же сокеты к службе и передавать или отображать данные.
Ничто не мешает, кроме как навязчивая мысль, что можно сделать проще...
Проще нужно потому, что придеться еще 4 проекта переделывать под службу, логика которых еще сложнее...
B>На rsdn есть статья о создании служб, если не получится: burda_r@mail.ru
Все статьи я пересмотрел ранее, к решению моей задачи они меня не продвинули ни на шаг.
Мне бы примерчик службы с интерактивностью и пример приложения, состоящего из одного exe файла — работающие как служба и как обычное приложение, чтоб увидеть как проще все сделать... на сайте удалось найти ссылку на пример интерактивной службы от Alex Fedotov
здесь (
топикАвтор: -lexa-
Дата: 14.03.02
), но примера там видимо уже давно нет (ссылка мертвая).
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 );
}
Здравствуйте, 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>
Давайте будем посерьезнее, а не отвечать ради ответа...