我已经创建了一个使用CopyFile()应用程序接口将文件从硬盘复制到软盘驱动器的应用程序。在复制大文件的过程中,如果软盘从驱动器中取出,则windows系统会弹出一条错误消息。
我想抑制系统弹出的这个错误消息。我在谷歌上搜索并阅读了许多应用程序用来解决类似问题的SetErrorMode()应用程序接口,并尝试将其与所有可能的标志选项一起使用,但失败了。示例代码-
UINT uOldErrorMode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);::CopyFile("C:\text.dat","A:\text.dat",FALSE);SetErrorMode (uOldErrorMode);
SetErrorMode()接口无法抑制错误消息。有人能帮助我理解为什么它不能与我的应用程序一起工作吗?
然后,我看到了下面的链接:http://support.microsoft.com/kb/128642,它介绍了密钥
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode
其值可以设置为0、1或2,以取消或显示错误消息。这个解决方案适用于我的应用程序,但我觉得
a.直接访问系统密钥不是一种好的编程实践吗?应该有一个API可以做到这一点。b.此类代码在Windows Vista或Windows 7上执行时应使UAC失败。
有没有人能提供一些帮助来解决上述问题。
你好,费利克斯
发布于 2009-12-13 10:55:25
我不确定这是否有效,但是尝试使用FOF_NOERRORUI
标志的SHFileOperation
怎么样?
发布于 2011-05-18 12:19:15
这不是一个完全的答案,但根据我的经验提供了更多的信息。我发现SetErrorMode似乎能在Windows Vista和Windows7上工作,但在Windows XP上却不行。XP仍然会弹出一个简单的...memory不能被“读取”的错误消息...撞车。这对于我在分布式处理无人值守的情况下的使用来说是一个杀手锏。问题中引用的那篇文章解决了我的问题。
我仍然被问题中关于程序化修改注册表的部分所困扰。对于我的情况,我不需要担心,因为SetErrorMode可以在7和vista中工作(目前还没有),但如果它不能工作,我只需要测试让windows在虚拟商店中设置它是否也会给出正确的行为。
https://stackoverflow.com/questions/1405548
复制相似问题