Создание службы Windows без Visual Studio

Давайте рассмотрим, что здесь говорит спецификация C ++ 14 о инициализации списка. [dcl.init.list] 3 имеет последовательность правил, которые должны применяться по порядку:

3.1 не применяется, поскольку Foo не является совокупностью.

3.2 не применяется, поскольку список не пуст.

3.3 не применяется, поскольку Foo не является специализацией initializer_list.

3.4 действительно применяется, поскольку Foo - тип класса. В нем говорится о конструкторах с разрешением перегрузки в соответствии с [over.match.list]. И это правило говорит, что сначала проверить initializer_list конструкторы . Поскольку ваш тип имеет конструктор initilaizer_list, компилятор должен проверить , чтобы узнать, может ли быть изготовлен initializer_list, соответствующий одному из этих конструкторов, из данных значений. Он может, поэтому это то, что должно называться .

Короче говоря, GCC прав, а Clang ошибочен .

Следует отметить, что рабочий проект C ++ 17 изменяет ничего об этом. Он имеет новый раздел 3.1, который имеет специальную формулировку для списков с одним значением, но применяется только к агрегатам . Foo не является совокупностью, поэтому он не применяется.

8
задан Chris Upchurch 3 September 2008 в 21:33
поделиться

4 ответа

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

Важная вещь состоит в том, что Ваша программа должна назвать StartServiceCtrlDispatcher () после запуска. Это подключает Ваш сервис к диспетчеру управления службами и настраивает стандартную программу ServiceMain, которая является Вашими сервисами основная точка входа.

ServiceMain (можно назвать его вообще, Вам нравится на самом деле, но это всегда, кажется, ServiceMain), должен затем назвать RegisterServiceCtrlHandlerEx () для определения стандартной программы обратного вызова так, чтобы ОС могла уведомить сервис, когда определенные события имеют место.

Вот некоторые отрывки от сервиса, который я записал несколько лет назад:

настроенный как сервис:

SERVICE_TABLE_ENTRY ServiceStartTable[] =
{
   { "ServiceName", ServiceMain },
   { 0, 0 }
};

if (!StartServiceCtrlDispatcher(ServiceStartTable))
{
   DWORD err = GetLastError();
   if (err == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
      return false;
}

ServiceMain:

void WINAPI ServiceMain(DWORD, LPTSTR*)
{
    hServiceStatus = RegisterServiceCtrlHandlerEx("ServiceName", ServiceHandlerProc, 0);

обработчик сервисов:

DWORD WINAPI ServiceHandlerProc(DWORD ControlCode, DWORD, void*, void*)
{
    switch (ControlCode)
    {
    case SERVICE_CONTROL_INTERROGATE :
        // update OS about our status
    case SERVICE_CONTROL_STOP :
        // shut down service
    }

    return 0;
}
3
ответ дан 5 December 2019 в 22:21
поделиться

Надеюсь, это поможет:

http://support.microsoft.com/kb/251192

Казалось бы что Вы простая потребность выполнить этот exe против двоичного исполняемого файла для регистрации его как услуга.

1
ответ дан 5 December 2019 в 22:21
поделиться

В основном существуют некоторые настройки реестра, которые необходимо установить, а также некоторые интерфейсы для реализации.

Проверьте это: http://msdn.microsoft.com/en-us/library/ms685141.aspx

Вы интересуетесь SCM (Диспетчер управления службами).

1
ответ дан 5 December 2019 в 22:21
поделиться

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

Мне удалось найти в MSDN эту статью, которая действительно закладывает основу. В итоге я объединил многие файлы в один исполняемый файл, содержащий все нужные мне команды, и добавил в свой собственный метод void run (), который циклически повторяется в течение всего срока службы службы для моих собственных нужд.

Это было бы отличным началом для кого-то еще, задающего именно этот вопрос, так что будущим поисковикам, обратите внимание:

Полный пример службы http://msdn.microsoft.com/en-us/ library / bb540476 (VS.85) .aspx

1
ответ дан 5 December 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: