Как подавить системное сообщение Windows - PullRequest
2 голосов
/ 10 сентября 2009

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

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

UINT uOldErrorMode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); :: CopyFile ("C: \ text.dat", "A: \ text.dat", FALSE); SetErrorMode (uOldErrorMode);

API SetErrorMode () не может подавить сообщение об ошибке. Может ли кто-нибудь помочь мне понять, почему он не работает с моим приложением?

Затем я наткнулся на ссылку ниже: http://support.microsoft.com/kb/128642, в которой говорится о ключе

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ ErrorMode

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

а. Это не хорошая практика программирования для прямого доступа к системному ключу? должен быть API, который должен это делать. б. Такой код должен давать сбой UAC при выполнении в Windows Vista или Windows 7.

Может ли кто-нибудь помочь с вышеуказанным вопросом?

С уважением, Felix

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

Это не совсем ответ, но немного больше информации, основанной на моем опыте. Я обнаружил, что SetErrorMode, похоже, работает в Windows Vista и Windows 7. Он не работает в Windows XP. В XP все равно всплывают сообщения об ошибках для простого ... память не может быть "прочитана" ... сбой. Это было убийственно для моего использования в распределенной обработке без присмотра. Статья, на которую есть ссылки в этом вопросе, исправила мой бекон.

Я все еще страдаю от части вопроса о программной модификации реестра. В моем случае мне не нужно беспокоиться, потому что SetErrorMode работал в 7 и vista (пока), но если это не так, я бы просто протестировал, чтобы убедиться, что установка Windows в виртуальном хранилище также даст правильное поведение.

0 голосов
/ 13 декабря 2009

Я не уверен, сработает ли это или нет, но как насчет попытки SHFileOperation с флагом FOF_NOERRORUI?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...