有时,为了实现动态更新,我们需要对正处于运行状态的应用程序进行自删除,就像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实现可执行文件运行时自删除


VB部分相关文章推荐:


※VB 释放资源文件到指定目录函数

※VB 读取资源文件里面的字符串

※VB中资源文件.res的使用方法详解

※VB6.0中创建和使用文本资源文件

※VB WindowsMediaPlayer 播放

※vb中WindowsMediaPlayer的常用属性和方法

※VB Environ系统环境变量函数大全

※VB 去除文本框粘贴功能

※VB LISTBOX

※VB 删除数组中的重复元素

※VB数组快速排序算法

※关于三个概念:ActiveX、OLE和COM

※VB 获得磁盘的文件系统

※VB中用API实现文件拖放

※加密算法-MD5算法

※VB中使用MD5算法

※VB 全局热键HOOK (不占系统资源版本)

※VB 小技巧自定义TextBox文本框右键菜单

※VB 写下载者代码

※VB 一行代码的诀窍

※VBS教程-wscript对象

※vb枚举进程

※在VB中如何让线程或进程在指定的CPU上运行

※VB判断指定的WORD文档是否被打开

※VB如何读取快捷方式的目标路径

※VB用API控制输入法状态

※为系统加载右键注册控件选项【VB 注册控件】

※VB如何根据窗口标题获得进程名称

※VB快速查找大型文件中包含的字符串

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

※VB 打开txt,bat,jpg 任意后缀程序

※VB 写文件关联程序

※VB 自启动建立右键菜单

※VB 判断IP能否ping通

※VB FTP操作类(可上传、下载、创建文件夹等等)

※VB部分文件汇总B

※Vb 求素数最经典的方法也是最快的方法

※vb用数组方式快速导出MSFlexGrid表格数据到Excel表格中

※VB中MsFlexGrid控件的使用细则

※点击MSFlexGrid数据控件的标题进行数据排序

※VB 获取鼠标坐标

※VB中NEW的用法(申请内存空间)

※VB CreateObject函数

※VB中的New 与 CreateObject的区别

※VB ListBox 添加不重复的值

※VB 单击ListView控件某列表头进行排序

※VB 简单实现简体与繁体互转

※VB 阿拉伯数字转换为中文大写数值函数

※VB 获取Textbox文本框中的行数函数


更多精彩>>>

VB实现可执行文件运行时自删除相关推荐

  1. VC运行时库(/MD、/MT等)

    VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT).多线程调试(/MTd).多线程DLL(/MD).多线程调试DLL(/MDd).单线程(/ML).单线程调试( ...

  2. VC 运行时库 /MD、/MDd 和 /MT、/MTd

    这里总结下他们的区别,后面的那个'd'是代表DEBUG版本,没有'd'的就是RELEASE版本了. 首先说/MT /MT是 "multithread, static version &quo ...

  3. mysql.lib 是mtd mdd_VS运行时 /MD、/MDd 和 /MT、/MTd之间的区别

    程序运行时出现问题,选择的是Release,win64位的模式,并且已经看到了宏定义NDEBUG,但是程序依然进入上面的部分 解决方案是将属性->C/C++->代码生成器->运行库里 ...

  4. 一文带你弄懂Visual Studio:运行时库及MT/MTD、MD/MDD

    一文带你弄懂Visual Studio:运行时库及MT/MTD.MD/MDD 引子 什么是Runtime Library? Runtime Library和运行库 MT MTD MD MDD的关系 静 ...

  5. Python语言的动态性:运行时动态绑定,删除属性和方法

           Python是动态语言,动态语言是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化.通俗点说就是在运行时代码可以根据某些 ...

  6. Linux下可执行文件指定运行时库(.so文件)路径

    rpath 全称是run-time search path,规定了Linux下可执行文件在寻找.so文件时的第一优先位置.比如我们想要指定可执行文件运行优先在当前目录下寻找.so 文件,则使用gcc/ ...

  7. oracle.net sdk,删除 .NET 运行时和 SDK | Microsoft Docs

    如何删除 .NET 运行时和 SDKHow to remove the .NET Runtime and SDK 03/02/2021 本文内容 经过一段时间后,在安装 .NET 运行时和 SDK 的 ...

  8. python程序运行不出来_python实战演练2:python可执行文件运行不成功怎么办

    要谈到这个话题,我们首先对如何将python文件制作成exe文件做简单介绍:众所周知,python语言作为一种脚本语言,本身是无法自己转化成可执行文件的,需要借助第三方工具才能将其转化为可执行文件(. ...

  9. ASP.NET HTTP运行时组成详解(转贴)

    作者:unknown 更新时间: 2005-03-17     简介 不管使用哪种底层平台,可靠性和性能都是对所有 Web 应用程序的主要要求,尽管从某种意义上讲,这两个要求是相互矛盾的.例如,要构建 ...

最新文章

  1. 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)
  2. Andropid自己定义组件-坐标具体解释
  3. token要加编码decode吗_彻底弄明白Base64 编码
  4. 基于Carbide.C++ 的Symbian开发环境搭建
  5. 在一个行业做,一定要打造自己的品牌IP
  6. Cheese 游戏编程:第 4 部分 (转自MSDN)
  7. group by 和count 联合使用问题
  8. 应届生从头脑风暴到游戏策划案的个人思路(一)
  9. python dateutil安装_Python时间处理-dateutil模块
  10. Yolov3中先验框生成
  11. 微软office2004 抢新体验版
  12. python中怎么用format居中_python中format函数
  13. 第十一章 初窥天机之数据类型为我所用
  14. 浅谈压缩感知(二):理论基础
  15. .NetCore之AutoMapper进阶篇
  16. 五分钟教你屏蔽百度广告
  17. Thinkphp内核虚拟资源素材源码交易下载平台网站源码
  18. 2021-10-09 CTF-KX(第一场)-lsb
  19. 系统管理的按钮权限和菜单权限该如何做
  20. py222基于python+django的高校学生信息管理系统

热门文章

  1. 小米开源语音模型 Kaldi-ONNX 转换工具,助力移动端部署!
  2. 5G 兴起、智能手机饱和、AI 普及......2019 年的科技趋势预测
  3. 107 岁的 IBM 以 340 亿美元吞下了 25 岁的“小”红帽!
  4. 程序员月薪2万怎么了?8千又怎么了?
  5. JAVA day16、17 数据结构(栈、队列、数组、链表、红黑树)
  6. python 通过ip获取城市_Python根据用户IP判断所属城市 !
  7. c语言组成整数的最大数字,c语言 编写程序将一个正整数中的所有偶数数字取出来并用这些数字构成一个最大数。...
  8. explain如何查看mysql_MySQL(九)|如何查看执行计划(Explain)
  9. python修改excel内容怎么覆盖_Python修改Excel的内容,python,excel
  10. webpack中hash、chunkhash、contenthash