Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Ошибка при повторном создании папки в планировщике задач Delphi (CoTaskScheduler)

Необходимо создать папку в планировщике задач имея переменную ts типа TaskSchd.ITaskService.
ts := CoTaskScheduler.Create(); ts.Connect('', '', '', ''); tf := ts.GetFolder('\').CreateFolder('test_F', null);
Первый запуск программы создаёт папку без проблем. Но, при повторном запуске, система сообщает об ошибке "Данная папка уже существует". Пытался через try except решать проблему, но не получилось (Сначала появлялось окно с ошибкой, а потом запускался обработчик).
Как обработать это исключение, чтобы не появлялось уведомление системы об ошибке?
P.S. Другие методы работы с планировщиком не подходят, только через приведённые в коде объекты.


Ответ

Вам должна помочь установка режима отображения системных ошибок SetThreadErrorMode. Она запрещает системе отображать диалоговые окна с ошибками и система вместо этого отправляет ошибку вызывающему потоку.
Если в вашей версии Delphi эта функция не объявлена, объявить ее можно так:
function SetThreadErrorMode(uNewMode: DWORD; var uOldMode: DWORD): BOOL; stdcall; external kernel32 name 'SetThreadErrorMode';
В моем случае, это помогло избавиться от сообщения типа "Отсутствует носитель", когда я пытался получить объем логического диска, который находился на картридере, в момент отсутствия карты памяти.
uses Windows; var OldErrorMode: Cardinal; begin SetThreadErrorMode(SEM_FAILCRITICALERRORS, OldErrorMode); try // действия, которые могут привести к появлению нежелательного диалога finally SetThreadErrorMode(OldErrorMode, OldErrorMode); end; end;

Комментариев нет:

Отправить комментарий