Ошибка 1053: сервис не ответил на запуск или управлял запросом своевременно

typedef typename Tail::inUnion dummy;

Однако я не уверен, что реализация inUnion верна. Если я правильно понимаю, этот класс не должен быть создан, поэтому вкладка «fail» никогда не будет автоматически терпеть неудачу. Возможно, было бы лучше указать, находится ли тип в объединении или нет с простым булевым значением.

template  struct Contains;

template 
struct Contains >
{
    enum { result = Contains::result };
};

template 
struct Contains >
{
    enum { result = true };
};

template 
struct Contains
{
    enum { result = false };
};

PS: Посмотрите на Boost :: Variant

PS2: посмотрите на typelists , особенно в книге Андрея Александреску: Modern C ++ Design

60
задан ROMANIA_engineer 9 March 2016 в 14:31
поделиться

7 ответов

У меня была эта проблема также. Я добрался до работы путем изменения учетной записи Входа в систему на Локальную Системную Учетную запись. В моем проекте у меня был он установка для выполнения как учетная запись Локальной службы. Таким образом, когда я установил его, по умолчанию это использовало Локальную службу. Я использую .net 2.0 и VS 2005. Так установка .net 1.1 SP1 не помогла бы.

0
ответ дан 24 November 2019 в 17:32
поделиться

Если Вы продолжите в будущем попытки заставить Ваш сервис взаимодействовать с рабочим столом пользователя непосредственно, Вы проиграете: даже при самом удачном стечении обстоятельств (т.е. "перед Vista"), это чрезвычайно хитро.

Windows внутренне управляет несколькими станции окна , каждый с их собственным рабочим столом. Станция окна, присвоенная сервисам, работающим в соответствии со сделанным отчетом, полностью отличается от станции окна зарегистрированного интерактивного пользователя. Доступ станции перекрестного окна всегда осуждался, поскольку это - угроза безопасности, но тогда как предыдущие версии Windows позволили некоторые исключения, они были главным образом устранены в Vista и более поздних операционных системах.

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

[только 115] надежная фиксация для этих проблем должна устранить весь код UI из Вашего сервиса и переместить его в отдельный исполняемый файл, который работает в интерактивном сеансе пользователя (исполняемый файл может быть запущен с помощью глобальной Группы запуска, например).

Коммуникация между Вашим кодом UI и Вашим сервисом может быть реализована с помощью любого механизма RPC: Именованные каналы работают особенно хорошо с этой целью. Если Ваши коммуникационные потребности минимальны, с помощью , определенные приложением команды Диспетчера управления службами могли бы также добиться цели.

Это приложит некоторые усилия для достижения этого разделения между UI и служебным кодом: однако, это - единственный способ заставить вещи работать надежно и будет служить Вам хорошо в будущем.

ПРИЛОЖЕНИЕ, апрель 2010: , Так как этот вопрос остается довольно популярным, вот способ зафиксировать другой общий сценарий, который вызывает "сервис, не ответил..." ошибки, вовлекая сервисы.NET, которые не делают попытку никакого забавного материала как взаимодействие с рабочим столом, но делают использование, Authenticode подписал блоки: отключают проверку подписи Authenticode во время загрузки для создания доказательства Издателя , путем добавления следующих элементов к .exe.config файлу:

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

доказательство Издателя является мало-используемой функцией Code Access Security (CAS): только в маловероятном случае, что Ваш сервис на самом деле полагается на PublisherMembershipCondition, будет, отключая его проблемы причины. Во всех других случаях это заставит постоянные или неустойчивые отказы запуска уйти, больше не требуя, чтобы время выполнения сделало дорогие проверки сертификата (включая поиски списка аннулирования).

29
ответ дан mdb 24 November 2019 в 17:32
поделиться

Для отладки запуска сервиса добавьте следующее к вершине OnStart() метод обслуживания:

 while(!System.Diagnostics.Debugger.IsAttached) Thread.Sleep(100);

Это остановит сервис, пока Вы вручную не присоедините Отладчик Visual Studio с помощью Отладки-> Присоединение к Процессу...

Примечание: В целом при необходимости в пользователе для взаимодействия с сервисом, лучше разделить компоненты графического интерфейса пользователя на приложение отдельных окон, которое работает, когда пользователь входит в систему. Вы тогда используете что-то как именованные каналы или некоторая другая форма IPC для установления коммуникации между приложением для GUI и сервисом. Это на самом деле [только 112] способ, которым это возможно в Windows Vista.

12
ответ дан Jacob 24 November 2019 в 17:32
поделиться

Я стреляю слепой здесь, но я очень часто находил, что длительные задержки в обслуживании запускаются, прямо или косвенно вызываются тайм-аутами сетевой функции, часто при попытке связаться с контроллером домена при поиске учетной записи SIDs - который происходит очень часто косвенно через GetMachineAccountSid(), понимаете ли Вы его или нет, так как та функция вызвана подсистемой RPC.

Для примера о том, как отладить в таких ситуациях, см. Случай Задержек Запуска Процесса на блоге Mark Russinovich.

5
ответ дан Mihai Limbășan 24 November 2019 в 17:32
поделиться

Установите отладочную сборку сервиса и присоедините отладчик к сервису видеть то, что происходит.

2
ответ дан Sijin 24 November 2019 в 17:32
поделиться

Я хочу повторить комментарии mdb здесь. Не идите этот путь. Ваш сервис, как предполагается, не имеет UI... "Никакое взаимодействие с пользователем" не похоже на definining функцию сервиса.

, Если необходимо настроить сервис, запишите другое приложение, которое редактирует ту же конфигурацию, которую сервис читает на запуске. Но сделайте его отличным инструментом - когда Вы хотите запустить сервис, Вы запускаете сервис. Когда Вы хотите настроить его, Вы запускаете инструмент конфигурирования.

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

Худший из всех при необходимости во взаимодействии с пользователем, тогда у Вас есть реальное разъединение здесь, потому что сервисы не взаимодействуют с пользователем.

В Вашей обуви я отступил бы и спросил бы , почему это должно быть сервисом ? И , почему этому нужно взаимодействие с пользователем ?

Эти два требования являются довольно несовместимыми, и это должно поднять тревогу.

2
ответ дан rice 24 November 2019 в 17:32
поделиться

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

0
ответ дан 24 November 2019 в 17:32
поделиться
Другие вопросы по тегам:

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