Безопасно ли устанавливать SEM_FAILCRITICALERRORS при запуске с VCL?

Я обнаружил, что рекомендуется вызывать SetErrorMode(SEM_FAILCRITICALERRORS) при запуске приложения:
https://docs.microsoft.com/en-us/windows/win32/api/errhandlingapi/nf-errhandlingapi-seterrormode

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

Поскольку я не вижу никаких преимуществ в поведении по умолчанию, я рассматриваю возможность его явной установки из своего кода. Мне просто интересно, предназначен ли VCL для работы в этом режиме. Кто-нибудь знает о какой-либо потенциальной проблеме? Любая причина, по которой VCL не устанавливает этот режим сам?


person Martin Prikryl    schedule 18.05.2013    source источник
comment
Если SetErrorMode(SEM_FAILCRITICALERRORS) является рекомендуемым поведением для всех приложений, то Microsoft должна сделать это поведение по умолчанию для всех новых процессов, вместо того, чтобы требовать, чтобы разработчики приложений вызывали его явно, ИМХО.   -  person Remy Lebeau    schedule 19.05.2013


Ответы (1)


В приложении VCL совершенно нормально следовать совету MSDN и устанавливать SEM_FAILCRITICALERRORS при запуске.

person David Heffernan    schedule 18.05.2013
comment
Я создал два тестовых проекта, один представляет собой пакет, а другой - исполняемый файл. Я перешел к параметрам/пакетам/сборке проекта exe с пакетами времени выполнения, ввел имя библиотеки и построил bpl, затем exe. Затем я пошел к источнику bpl и удалил один из методов, пересобрал bpl, запустил exe, он открыл диалоговое окно с ошибкой. Затем в проекте exe я просмотрел исходный код и написал SetErrorMode(SEM_FAILCRITICALERRORS) перед вызовом метода Application Initialize. Он по-прежнему показывает окно сообщения. Где я должен написать это, чтобы вручную обработать ошибку? - person nurettin; 05.12.2016
comment
Какое окно сообщения вы видите? - person David Heffernan; 05.12.2016
comment
Не удалось найти точку входа в процедуру @Libtest@TLibTest@TestMissingProcedure$qqrv в библиотеке динамической компоновки LoadedLibrary.bpl. - person nurettin; 05.12.2016
comment
Это ошибка, вызванная средой выполнения Delphi, и поэтому на нее не влияет режим ошибки SEM_FAILCRITICALERRORS. - person David Heffernan; 05.12.2016
comment
возможно, возможно, среда выполнения delphi вызывает loadpackage, который вызывает loadlibrary, поэтому, если бы я мог вызвать seterrormode до того, как среда выполнения delphi сделает это, я мог бы предотвратить диалоговое окно? - person nurettin; 05.12.2016
comment
Сбои в LoadLibrary и GetProcAddress не являются критическими ошибками. - person David Heffernan; 05.12.2016
comment
Да, я хочу, чтобы моя программа не останавливалась из-за некритических ошибок. - person nurettin; 05.12.2016
comment
Вы ищете не в том месте. Режим ошибки Windows не имеет отношения к вашей проблеме. - person David Heffernan; 05.12.2016