求一段C语言写的程序自毁代码,要求该程序在任务结束后删除自身及相关文件.

求一段C语言写的程序自毁代码,要求该程序在任务结束后删除自身及相关文件.,第1张

BOOL SelfDel()

{

SHELLEXECUTEINFO sei

TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH]

// 获得自身文件名. 获取cmd的全路径文件名

if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&

(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&

(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))

{

    // 设置命令参数.

    lstrcpy(szParams,"/c del ")

    lstrcat(szParams, szModule)

    lstrcat(szParams, " > nul")

    // 设置结构成员.

    sei.cbSize = sizeof(sei)

    sei.hwnd = 0

    sei.lpVerb = "Open"

    sei.lpFile = szComspec

    sei.lpParameters = szParams

    sei.lpDirectory = 0 sei.nShow = SW_HIDE

    sei.fMask = SEE_MASK_NOCLOSEPROCESS

    // 创建cmd进程.

    if(ShellExecuteEx(&sei))

    {

        // 设置cmd进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出.

        SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS)

        // 将自身进程的优先级置高

        SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)

        SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)

        // 通知Windows资源浏览器,本程序文件已经被删除.

        SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0)

        return TRUE

    }

}

return FALSE

}

其他相关程序直接调用remove函数删除就好. 只有程序本身 需要新建进程删除 也就是上面这个代码. 

不过我还是没有找到象你说的那样的程序

逾期自毁程序指一些程序,如中文编辑软件CCED及WPS等,这类程序的使用有一定的日期

限制,一旦逾期,将提出警告并删除系统运行所必须的文件。显然这类程序给我们的日常应

用带来了诸多不便。一种简单的方法是用DOS的DATE命令修改系统日期,然后运行这类程序

,运行完毕再改回日期。该法虽然可行,但需较多的人工干预,万一忘记某一步骤,将产生不

可预料的后果。一种改进的方法是使用批命令,但由于无法保证运行后系统日期的正确,故

其实际效果仍欠佳。有鉴于此,笔者用C语言编写了一个程序(附后),圆满地解决了此问题。

使用本方法不仅可以有效地防止程序自毁,而且不对系统日期产生影响。程序用Turbo C V

2.0编译通过,在PC/AT、Super386上运行通过。

#include

#include

#include

#include

extern unsigned_stklen=2048

extern unsigned_heaplen=2048

int main(int argc,char *argv ,char * envp )

{

struct date curdate,olddate

int reyear

inr result

char * errstr[] =

{

"Parameter table too long.",

"Invalid parameter.",

"Path or filename not found.",

"Bad EXEC format.",

"Not enough memory",

"Unknown error"

}

"int err

if (argc==1)

{

printf(" This program is used for executing those programs\n")

printf ("which may destroy themselves while deadline passed.\n\n")

printf ("Usage:SAFEDATE\n")

return 1

}

getdate (&curdate)

olddate=curdate

reyear=olddate.da_year_1980

olddate.da_year-=reyear

setdate (&olddate)

argv++/* Adjust command line pointer */

result=spawnvpe(P_WAIT,argv[0],argv,envp)

olddate.da_year+=reyear

setdate (&olddate)

if (result==-1)

{

printf("\aExecuting program%sfailed.\n",argv[0])

switch (errno)

{

case E2BIG: err=0

break

case EINVAL: err=1

break

case ENOENT: err=2

break

case ENOEXEC: err=3

break

case ENOMEM: err=4

break

default:

err=5

}

printf(" %s\n", errstr [err])

return 2

}

return 0

}

注:此文仅作为一种应用技巧予以刊出,仅此而已。

——编者


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12014425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存