一个程序运行以后能删除自己么?

killhack 2003-02-18 04:45:26
一个程序运行以后能删除自己么? 急用!!
...全文
31 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoke000 2003-02-18
  • 打赏
  • 举报
回复
试试这个函数,我写的更新程序时用的。
void DeleteSelf()
{
TProcessInformation ProcessInfo;
TStartupInfo StartUpInfo;
AnsiString sPath = ExtractFilePath(ParamStr(0));
AnsiString BatchFileName = sPath + "DelSelf.bat";
TStringList* vStringList = new TStringList;
try
{
vStringList->Add(":try");
vStringList->Add("del \"" + ParamStr(0) + "\"");
vStringList->Add("if exist \"" + ParamStr(0) + "\" goto try");
vStringList->Add("del %0");
vStringList->SaveToFile(BatchFileName);
}
__finally
{
delete vStringList;
}

memset(&StartUpInfo, 0, sizeof(TStartupInfo));
StartUpInfo.dwFlags = STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow = SW_HIDE;
char* szCmdLine = BatchFileName.c_str();
if(CreateProcess(NULL, szCmdLine, NULL, NULL,
false, IDLE_PRIORITY_CLASS, NULL, NULL, &StartUpInfo,
&ProcessInfo))
{
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
}
l_clove 2003-02-18
  • 打赏
  • 举报
回复
NowCan的代码
#include <windows.h>

int main()
{
char buf[MAX_PATH];
HMODULE Hm1,Hm2;
HANDLE Ex,De,Un;
Hm2=GetModuleHandle(0);
GetModuleFileName(Hm2,buf,255);
Hm1=GetModuleHandle("Kernel32");
Ex=GetProcAddress(Hm1,"ExitProcess");
De=GetProcAddress(Hm1,"DeleteFileA");
Un=GetProcAddress(Hm1,"UnmapViewOfFile");
CloseHandle(HANDLE(4));
__asm {
LEA EAX,buf
PUSH 0
PUSH 0
PUSH EAX
PUSH Ex
PUSH Hm2
PUSH De
PUSH Un
RET
}
return 0;
}

pepsi1980 2003-02-18
  • 打赏
  • 举报
回复
这个问题在以前解决过了,借花献佛!
int main(int argc, char *argv[])
{
HMODULE module = GetModuleHandle(0);
CHAR buf[MAX_PATH];
GetModuleFileName(module, buf, sizeof buf);
CloseHandle(HANDLE(4));
__asm {
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}
return 0;
}


13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧