Delphi 由于防病毒,Win32 WriteFile未返回
我的代码是用Delphi7编写的,但我不认为它有什么特殊作用 我试图用WriteFile覆盖文件的内容。 除了在写入“.dll”文件和防病毒处于活动状态时,它工作正常Delphi 由于防病毒,Win32 WriteFile未返回,delphi,winapi,antivirus,Delphi,Winapi,Antivirus,我的代码是用Delphi7编写的,但我不认为它有什么特殊作用 我试图用WriteFile覆盖文件的内容。 除了在写入“.dll”文件和防病毒处于活动状态时,它工作正常 打开文件的句柄仍然可以 写入被阻止:WriteFile函数不返回 防病毒软件似乎可以防止该dll中的覆盖。 但是,最糟糕的是,我必须重新启动电脑,因为我的应用程序被阻止,任务管理器被阻止,Windows资源管理器被阻止,等等 我怎样才能防止这种情况 有什么想法吗?如果在可执行文件中添加数字签名,则触发反病毒的可能性较小。很多d
- 打开文件的句柄仍然可以
- 写入被阻止:WriteFile函数不返回强>
有什么想法吗?如果在可执行文件中添加数字签名,则触发反病毒的可能性较小。很多delphi程序被反病毒软件误定位,D7是最差的 不确定要写入dll的内容。反病毒软件不喜欢PE之外的额外数据
如果您只需要更新dll,请尝试重命名旧dll,然后编写新文件,然后删除旧文件。参考其他人关于如何解决防病毒问题的说法,在代码中,您还可以使用重叠I/O在
WriteFile()上设置超时
确保您的代码不再死锁,以防此问题再次出现。如果重叠操作超时,您可以使用CancelIo()
取消该操作,然后将问题报告给用户。请注意,还有更多信息。您使用的是什么防病毒软件?抱歉,但我们无法控制最终用户的电脑。Bitdefender出现问题。然后不要执行触发防病毒软件的操作。像安装人员那样做。将新内容写入文件,可能没有dll扩展名。注册一次运行以用新内容替换dll并请求重新启动。任何编译器都不能在带有该AV软件的计算机上运行。我建议换掉AV。如果没有客户,您可能希望联系AV供应商。除非您正在编写编译器,否则您的程序看起来很像恶意软件。@DavidHeffernan:我们在工作中使用BitDefender,它通常不会干扰Delphi。但你是对的,这是迄今为止我见过的最烦人的AV解决方案。一旦当前订阅用完,我们将转向其他内容,这次我不相信德国c't杂志中的AV测试。但是WriteFile会变为异步,不是吗?是的,但这并不意味着您让调用代码也异步运行。您可以使用file\u FLAG\u OVERLAPPED
标志打开文件,然后声明一个OVERLAPPED
结构并用CreateEvent()
中的可等待事件填充它,然后像通常一样调用WriteFile()
,但将OVERLAPPED
传递给它,然后使用WaitForSingleObject()
等待事件发出信号。如果WFSO报告发出信号,请使用GetOverlappedResult()
获取写入结果,否则使用CancelIo()
中止写入并根据需要处理WFSO错误/超时。