我创建了一个应用程序,它使用CopyFile()API将文件从硬盘复制到软盘驱动器。 在大文件的复制过程中,如果软盘从驱动器中删除,那么Windows 系统弹出一条错误信息。
我想要禁止系统弹出的此错误消息。我用谷歌搜索并阅读有关使用的SetErrorMode()API 许多应用程序解决类似的问题,并尝试使用它与所有可能的标志选项,但它失败了。示例代码 -
UINT uOldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); :: CopyFile(“C:\ text.dat”,“A:\ text.dat”,FALSE); SetErrorMode(uOldErrorMode);
SetErrorMode()API无法抑制错误消息。任何人都可以帮助我理解为什么它不能用于我的应用程序?
然后我遇到了以下链接:http://support.microsoft.com/kb/128642,其中谈到了密钥
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ ErrorMode
其值可以设置为0,1或2以抑制或显示错误消息。这个解决方案适用于我的应用程序,但我觉得
一个。直接访问系统密钥不是一个好的编程习惯吗?应该有一个应该这样做的API。 湾在Windows Vista或Windows 7上执行此类代码时,UAC将失败。
任何人都可以就上述问题提供一些帮助。
此致 菲利克斯
答案 0 :(得分:0)
我不确定这是否有效,但是如何使用FOF_NOERRORUI
标志尝试SHFileOperation
呢?
答案 1 :(得分:0)
根据我的经验,这不是一个答案,而是一些更多的信息。我发现SetErrorMode似乎适用于Windows Vista和Windows 7.它在Windows XP中不起作用。 XP仍然会弹出错误信息,因为简单...内存无法“读取”...崩溃。这对于我在无人值守的分布式处理中的使用是个杀手。问题中引用的文章为我的培根添加了一个修复程序。
我仍然遇到有关编程修改注册表的问题。对于我的情况,我不需要担心,因为SetErrorMode工作在7和vista(还),但如果它没有我只是测试看看是否让它在虚拟存储中设置它也会给出正确的行为。 / p>