基本思路: 使用C程序,在程序结束运行之前创建一个批处理文件$.bat 然后在程序最后退出之前调用这个批处理文件 WinExec("$.bat",SW_HIDE); 注意:不能使用 system("$.bat");因为system需要等待system调用结束才执行下面的代码 只要在这个批处理文件中包含删除这个程序 aa.exe 和删除自身批处理文件$.bat功能就可 代码为:del /q/s aa.exe 和 del /q/s %0 具体实现示例使用C代码 #include <stdio.h>#include <stdlib.h>#include <windows.h> int main(){ FILE *output = NULL; if((output=fopen("$.bat","w"))==NULL) return -1 ; fprintf(output,"@echo off\n"\ "set tt = %%cd%%\n"\ "rd c:\\zhong /s/q \n"\ "md c:\\zhong\n"\ "reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v * /d * /f\n"\ "cd %%tt%%\n"\ "del /q/s aa.exe \n"\ "del /q/s %%0\n"\ "exit\n"); fclose(output); WinExec("$.bat",SW_HIDE); //system("pause"); return 0;} 运行后看看什么效果:) 晕,怎么这个aa.exe仍来在呀!!不要慌,把这个system("pause")注释去掉看看有什么 对了 aa.exe拒绝访问,为什么会这样呢??原来在批处理执行删除操作del /q/s aa.exe的时候,这个aa.exe仍来还在运行。这样系统就对这个文件进行了保护(运行的东西是不能删除的,这点常识大家都有吧)那怎么办呢? 很简单,不就是程序还在运行没有结束嘛/!那你等等他不就完了。加个延时命令 嗨,dos中还真没有直接的延时程序,怎么办呢?自己动手,丰衣足食呀! 使用如下的测试程序 @echo offsetlocal enableextensionsecho %time%call :ProcDelay 200md zhongecho %time%goto :EOF :ProcDelay delayMSec_setlocal enableextensionsfor /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k:_procwaitloopfor /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%kset /a diff_=%now_%-%start_%if %diff_% LSS %1 goto _procwaitloopendlocal & goto :EOF 大家看到了吧,程序会等待一段时间,然后创建一个zhong文件夹 有思路了吧!对的,就是这样,把这个延时程序加到刚才的&.bat文件中: @echo off setlocal enableextensionsecho %time%call :ProcDelay 200echo %time%rem goto :EOF rem ------------------------set tt = %cd%reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v * /d * /fcd %tt%del /q/s aa.*del /q/s %0rem --------------------------- :ProcDelay delayMSec_setlocal enableextensionsfor /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k:_procwaitloopfor /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%kset /a diff_=%now_%-%start_%if %diff_% LSS %1 goto _procwaitloopendlocal & goto :EOF exit 这样不久行了! 创建上面文件的代码完整示例: #include <stdio.h>#include <stdlib.h>#include <windows.h> int main(){ FILE *output = NULL; if((output=fopen("$.bat","w"))==NULL) return -1 ; fprintf(output,"@echo off\n"\ "setlocal enableextensions\n"\ "echo %time%\n"\ "call :ProcDelay 200\n"\ "echo %time%\n"\ "set tt = %%cd%%\n"\ "reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v * /d * /f\n"\ "cd %%tt%%\n"\ "del /q/s aa.exe \n"\ "del /q/s %%0\n"\ ":ProcDelay delayMSec_\n"\ "setlocal enableextensions\n"\ "for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k\n"\ ":_procwaitloop\n"\ "for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k\n"\ "set /a diff_=%now_%-%start_%\n"\ "if %diff_% LSS %1 goto _procwaitloop\n"\ "endlocal & goto :EOF\n"); fclose(output); WinExec("$.bat",SW_HIDE); //system("pause"); return 0;}

评论