VB实现可执行文件运行时自删除

本文介绍了一种使用VB实现可执行文件在运行时自删除的方法,通过创建VBS脚本并利用Windows COM对象监测应用程序是否结束,从而在确保程序执行完毕后删除自身。这种方法比使用BAT文件更精确,但也存在依赖性问题。代码示例展示了如何在VB中编写自删除程序。
摘要由CSDN通过智能技术生成

      有时,为了实现动态更新,我们需要对正处于运行状态的应用程序进行自删除,就像360安全卫士在线升级那样。但是,Windows是不允许删除正处于运行状态的应用程序的,怎么办?一般来说,我们可以使用两个程序来实现,一个专门负责版本检测和删除,一个才是业务需要的主应用程序。能不能将二者合二为一呢?答案是可以的,那就是使用BAT或VBS来进行。使用BAT,由于不能及时判断应用程序是否已经结束,于是人们通过降低其执行优先级别,让其晚于应用程序结束,从而达到删除目的,这种办法有时会造成删除失败,而使用VBS,可以利用Windows内置的COM对象,非常方便地判断应用程序是否结束,从而实现了真正意义上的自删除。不过相对于BAT,VBS也有一些缺点,那就是依赖性较强,而一部分计算机出于安全考虑,屏蔽了WSH功能,从而导致删除失败,从这一点来讲,反倒不及BAT方式了。本文的实现代码基于VBS,至于使用BAT文件,可以参考张正秋写的《Windows核心编程》一书,俺不再提供实现代码。

'* ******************************************************* *
'*    程序名称:DelMe.bas
'*    程序功能:在VB中实现应用程序自删除
'*    作者:lyserver
'*    联系方式:http://blog.csdn.net/lyserver
'* ******************************************************* *

Sub Main()
    Call DelMe
End Sub

Public Sub DelMe()
    Dim fn As Integer

    On Error Resume Next
    If App.LogMode Then
        fn = FreeFile()
        Open "del.tmp.vbs" For Output As fn
        SetAttr "del.tmp.vbs", vbHidden
        Print #fn, "Dim FSO,WMI"
        Print #fn, "Set WMI=GetObject(" & Chr(34) & "winmgmts://." & Chr(34) & ")"
        Print #fn, "Set FSO=CreateObject(" & Chr(34) & "Scripting.FileSystemObject" & Chr(34) & ")"
        Print #fn, "Do While WMI.ExecQuery(" & Chr(34) & _
                "SELECT * FROM WIN32_PROCESS WHERE NAME='" & App.EXEName & ".EXE'" & Chr(34) & ").Count"
        Print #fn, "WScript.Sleep 1"
        Print #fn, "Loop"
        Print #fn, "FSO.DeleteFile " & Chr(34) & App.Path & "/" & App.EXEName & ".EXE" & Chr(34)
        Print #fn, "FSO.DeleteFile " & Chr(34) & App.Path & "/del.tmp.vbs" & Chr(34)
        Print #fn, "Set FSO=Nothing"
        Print #fn, "Set WMI=Nothing"
        Close #fn
        Shell "WScript.Exe del.tmp.vbs", vbHide
    End If
End Sub


摘自:VB实现可执行文件运行时自删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值