首先,启动Visual C++6.0,新建一个MFC AppWizard(exe)类型的项目,项目名为SelfDelete,选择基于对话框模式创建程序框架。
接下来,打开资源编辑器,添加一个按钮控件,设置内容为开始“自杀”,如图一所示:
启动ClassWizard,为新添加的控件新建CLICK事件处理函数,再打开该函数,添加“自杀”代码如下:
void CSelfDeleteDlg::OnButton1()
{
// TODO: Add your control notification handler code here
SHELLEXECUTEINFO sei;
TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
//获取文件路径名
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"); //初始化SHELLEXECUTEINFO结构成员
sei.cbSize = sizeof(sei); //设置类型大小。
//命令窗口进程句柄,ShellExecuteEx函数执行时设置。
sei.hwnd = 0;
sei.lpVerb = "Open"; //执行动作为“打开执行”。
sei.lpFile = szComspec; //执行程序文件全路径名称。
sei.lpParameters = szParams; //执行参数。
sei.lpDirectory = 0;
//显示方式,此处使用隐藏方式阻止出现命令窗口界面。
sei.nShow = SW_HIDE;
//设置为SellExecuteEx函数结束后进程退出。
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
//创建执行命令窗口进程。
if(ShellExecuteEx(&sei))
{ //设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出。
SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
//设置本程序进程的执行级别为实时执行,这本程序马上获取CPU执行权,快速退出。
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
//通知Windows资源浏览器,本程序文件已经被删除。
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
//执行退出程序
EndDialog(0);
} } }
接下来,打开资源编辑器,添加一个按钮控件,设置内容为开始“自杀”,如图一所示:
启动ClassWizard,为新添加的控件新建CLICK事件处理函数,再打开该函数,添加“自杀”代码如下:
void CSelfDeleteDlg::OnButton1()
{
// TODO: Add your control notification handler code here
SHELLEXECUTEINFO sei;
TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
//获取文件路径名
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"); //初始化SHELLEXECUTEINFO结构成员
sei.cbSize = sizeof(sei); //设置类型大小。
//命令窗口进程句柄,ShellExecuteEx函数执行时设置。
sei.hwnd = 0;
sei.lpVerb = "Open"; //执行动作为“打开执行”。
sei.lpFile = szComspec; //执行程序文件全路径名称。
sei.lpParameters = szParams; //执行参数。
sei.lpDirectory = 0;
//显示方式,此处使用隐藏方式阻止出现命令窗口界面。
sei.nShow = SW_HIDE;
//设置为SellExecuteEx函数结束后进程退出。
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
//创建执行命令窗口进程。
if(ShellExecuteEx(&sei))
{ //设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出。
SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
//设置本程序进程的执行级别为实时执行,这本程序马上获取CPU执行权,快速退出。
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
//通知Windows资源浏览器,本程序文件已经被删除。
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
//执行退出程序
EndDialog(0);
} } }
不如直接执行exit()试验一下。
你的这个方法不行吧!