Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с запуском процесса через сервис Windows на Delphi Tokyo: анализ ошибки 1008 и варианты устранения <|eot_id|>

Delphi , ОС и Железо , Windows

Решение проблемы с запуском процесса через сервис Windows на Delphi Tokyo: анализ ошибки 1008 и варианты устранения

В данной статье мы рассмотрим проблему, возникающую при попытке запуска процесса через сервис Windows, созданный на Delphi Tokyo. Процесс должен запускаться при старте системы, но в определенных условиях возникает ошибка с кодом 1008. Мы проанализируем причины возникновения этой ошибки и предложим способы её устранения.

Описание проблемы

Пользователь столкнулся с проблемой при работе с сервисом Windows, написанным на Delphi Tokyo. Сервис корректно запускает процесс при старте системы, но встроенный таймер, который циклически проверяет активность процесса, обнаруживает, что процесс не запущен, и пытается его запустить. Однако эта попытка заканчивается ошибкой с кодом 1008.

Анализ кода

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

function TMyservice.CreaProcessoComeUtenteX(...): Boolean;
begin
  // Код, который получает сессионный ID и пытается создать процесс
  // ...
  if WTSQueryUserToken(SessionID, UserToken) then
  begin
    // Код создания процесса
    // ...
    CreateProcessAsUser(...);
    // ...
  end
  else
  begin
    // Логирование ошибки
    // ...
  end;
end;

Подтвержденный ответ

Проблема заключается в том, что функция WTSGetActiveConsoleSessionID возвращает сессионный ID активной консольной сессии, который может быть неактивен, особенно при старте системы. Для решения проблемы следует использовать функцию WTSEnumerateSessions, которая позволит перебрать все сессии и найти ту, которая имеет активного пользователя.

Альтернативный ответ и комментарии

В альтернативном ответе пользователь упомянул, что попытка имитации пользователя привела к ошибке доступа 5, и добавил соответствующий код. Однако было указано, что проблема не связана с имитацией, и рекомендовано удалить этот код, так как он некорректен.

Пользователь также отметил, что после удаления кода имитации процесс запустился без использования рекомендованной функции WTSEnumerateSessions, которую он не изучал. Несмотря на это, было заключено, что предложенное решение работает, и пользователь принял ответ.

Улучшение кода

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

if not CreateProcessAsUser(...) then
begin
  // Обработка ошибки
  // ...
end;

Заключение

Для корректной работы сервиса, запускающего процесс при старте системы, необходимо использовать WTSEnumerateSessions для поиска активной сессии с пользователем. Кроме того, важно правильно обрабатывать ошибки, возвращаемые функциями Windows, и не полагаться на try..except для этого.

Создано по материалам из источника по ссылке.

Статья рассматривает проблему запуска процесса через сервис Windows на Delphi Tokyo, анализирует возникновение ошибки 1008 и предлагает пути её устранения, в том числе использование функции `WTSEnumerateSessions` для поиска активной сессии


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:39:27/0.0038740634918213/0