当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

若何简单实现可履行文件的自我删除[VC/C++编程]

赞助商链接



  本文“若何简单实现可履行文件的自我删除[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

可履行文件即 EXE 文件在运行历程中,由系统管理其翻开的句柄.此时对该 文件的一些操作是被系统禁止的,比方删除操作.但是在某些场所,大概必要程 序有自我删除的功效,也就是程序运行完毕后删除自身.基于这个设法,可以有 一种很简单的办法来实现这个基本功效.

本办法基于两点来实现删除功效.一是操纵 windows 的 command program 的 删除文件操作;再者就是启动新的进程来履行这个删除操作.下面就细心阐明.

Windows 中的 command program 是一个系统的 shell program. 在 windows95/98/Me 中,其文件名为 command.com ,而在 NT/2000/XP 中则是 cmd.exe .我们可以通过环境变量 COMSPEC 得到其全途径名.

假定目前我们所利用的是 XP ,在号令行中输入 :

cmd.exe /?

即得到 command shell 的利用办法;此中 /c 的含义是:履行字符串指定的 号令然后终断,这恰是我们所必要的.这样操纵 command shell 删除一个文件的 号令以下:

cmd.exe /c del mypro.exe

这里要注意一点,文件名应当是短文件名(文件名不得超越 8 个字符 , 后缀 不超越 3 个字符).假照实际文件是长文件句,那么程序中我们可以用 GetShortPathName 这个 API 函数来转换.

接下来我们要做是如安在一新的进程中成功的履行这一指令.起来一个新进程 的号令主要有 ShellExecute 和 CreateProcess .

先利用 ShellExecute 为例.在程序的完毕处利用以下语句:

ShellExecute(NULL, "open","cmd.exe", "/c del mypro.exe ", NULL, SW_HIDE);

编译后运行文件发现履行成功,文件运行完后被删除.但是背面做多次实行后 ,发现有时文件履行完后并不会被删除.通过解析,认为在删除操作履行时,可 履行文件还未关闭.也就是说只有在履行文件的进程关闭后,履行删除操作的进 程才能完成操作.这样就有了一个问题,系统负责进程和线程的调度履行,我们 无法人为规定进程或线程以某种秩序履行.

对此我的办理办法是,成立履行删除操作的进程时设定其为挂起状况,从而为 其的设定一个低优先级别,同时提高履行文件的进程级别,然后才正式起动新进 程.这样基本可以保证两个进程的先后履行.这样新的办理办法就是用 CreateProcess以CREATE_SUSPEND标志来成立新进程,然后用SetPriorityClass来 设定呼应的优先级,主进程的优先级是HIGH_PRIORITY_CLASS,而履行删除操作的 进程的优先级是IDLE_PRIORITY_CLASS.经过数百次的测试,删除操作都是成功的 .


  以上是“若何简单实现可履行文件的自我删除[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 若何简单实现可履行文件的自我删除
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .