ab.eXe是用VB编写的可执行文件,当ab.eXe运行中间时,想让它自已删除干净硬盘里的本文件自己的ab.eXe文件,应该在本程序中插用几行Vb什么代码能实现之。?联系我15392035053.实现或能完成者有奖金!
28条回答 默认 最新
问答-莫得感情 2024-11-06 20:56关注️题主您好️,目前由我为您解答👇🏼
🧡参考谷歌智能助手,由吾为汝整理提供🧡VB程序自身删除自身比较棘手,因为文件在运行时系统会锁定,无法直接删除。需要一些技巧来绕过这个限制。核心思路是利用外部程序或批处理文件来在程序结束后删除自身。以下提供几种方法,并分析其优缺点:
方法一:使用
Shell()函数执行批处理文件这是比较常用的方法。创建一个批处理文件(例如
delete.bat),内容如下:ping 127.0.0.1 -n 5 > nul ' 延时5秒,确保程序已退出 del "%~f0"在VB程序中,接近程序结束的地方添加如下代码:
Private Sub Form_Unload(Cancel As Integer) Shell("cmd.exe /c delete.bat", vbHide) End Sub优点: 相对简单易懂,兼容性好。 缺点: 会留下一个
delete.bat文件,需要额外处理。方法二:改进版批处理,删除自身和批处理文件
为了解决方法一留下
delete.bat的问题,可以改进批处理文件如下:timeout /t 5 /nobreak > nul ' 延时5秒 del "%~f0"VB代码不变。
优点: 比方法一更干净,不留下额外文件。 缺点:
timeout命令是Windows Vista及以后系统才有的,在XP等旧系统上可能需要其他延时方法。方法三:使用
MoveFileEx函数MoveFileEx函数可以设置移动文件并在下一次重启时删除。Private Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Boolean Private Sub Form_Unload(Cancel As Integer) Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4 MoveFileEx App.Path & "\ab.exe", vbNullString, MOVEFILE_DELAY_UNTIL_REBOOT End Sub优点: 不依赖外部文件,代码简洁。 缺点: 需要重启才能生效,用户体验可能不好。
方法四:创建辅助程序
创建一个小的辅助程序(例如
deleter.exe),其唯一功能就是删除指定文件。在ab.exe中启动deleter.exe,并将自身路径作为参数传递。' 在ab.exe中 Private Sub Form_Unload(Cancel As Integer) Shell App.Path & "\deleter.exe " & App.Path & "\ab.exe", vbHide End Subdeleter.exe可以使用任何语言编写,例如C++、C#等,核心代码就是删除指定文件。优点: 灵活,可以实现更复杂的逻辑。 缺点: 需要额外创建一个程序。
重要提示:
- 延时非常重要: 无论使用哪种方法,都必须确保在删除文件之前
ab.exe已经完全退出。否则会删除失败。 - 测试: 强烈建议在虚拟机或测试环境中充分测试这些方法,以免造成数据丢失。
- 权限: 程序需要有足够的权限才能删除自身。如果程序运行在受限的环境中,可能需要提升权限。
希望以上信息能帮到您。关于奖金的事情,请通过您提供的联系方式私下沟通。 请注意,自我删除程序可能被杀毒软件误报为恶意软件,需要谨慎处理。
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用- 延时非常重要: 无论使用哪种方法,都必须确保在删除文件之前