csdn967 2024-11-06 20:45 采纳率: 60%
浏览 105
已结题

如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件

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 Sub
    

    deleter.exe可以使用任何语言编写,例如C++、C#等,核心代码就是删除指定文件。

    优点: 灵活,可以实现更复杂的逻辑。 缺点: 需要额外创建一个程序。

    重要提示:

    • 延时非常重要: 无论使用哪种方法,都必须确保在删除文件之前ab.exe已经完全退出。否则会删除失败。
    • 测试: 强烈建议在虚拟机或测试环境中充分测试这些方法,以免造成数据丢失。
    • 权限: 程序需要有足够的权限才能删除自身。如果程序运行在受限的环境中,可能需要提升权限。

    希望以上信息能帮到您。关于奖金的事情,请通过您提供的联系方式私下沟通。 请注意,自我删除程序可能被杀毒软件误报为恶意软件,需要谨慎处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(27条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月13日
  • 已采纳回答 11月13日
  • 创建了问题 11月6日