社区
Delphi
帖子详情
如何自己删除自己
lovelymelon
2003-06-05 08:55:55
想做一个卸载程序,不知道怎样让程序在执行过程中将自己也删除掉。请各位帮帮忙
...全文
66
5
打赏
收藏
如何自己删除自己
想做一个卸载程序,不知道怎样让程序在执行过程中将自己也删除掉。请各位帮帮忙
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kuangning
2003-06-05
打赏
举报
回复
//转贴 来自 delphi猛料
procedure DeleteSelf;
var
module : HMODULE;
buf : array[0..MAX_PATH - 1] of char;
p : ULONG;
hKrnl32 : HMODULE;
pExitProcess, pDeleteFile, pFreeLibrary: pointer;
begin
module := GetModuleHandle(nil);
GetModuleFileName(module, buf, sizeof(buf));
CloseHandle(THandle(4));
p := ULONG(module) + 1;
hKrnl32 := GetModuleHandle('kernel32');
pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
asm
lea eax, buf
push 0
push 0
push eax
push pExitProcess
push p
push pDeleteFile
push pFreeLibrary
ret
end;
end;
把DeleteSelf代码放在DPR文件的最后一句即可,程序关闭之后,就会自动删除文件!此外,如果要任何时候都删除Exe的话,可以配合ExitProc&TerminateProc全局变量和AddExitProc&AddTerminateProc来做到这一点!!这个过程的优点在于不需要一个临时文件,保密程度和技术方面都比较强的。当然,你也可以利用一个临时的批处理文件来达到目的!
procedure DeleteMe;
var
BatchFile: TextFile;
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
BatchFileName := ExtractFilePath(ParamStr(0)) + '_deleteme.bat';
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, ':try');
Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
Writeln(BatchFile,
'if exist "' + ParamStr(0) + '"' + ' goto try');
Writeln(BatchFile, 'del %0');
CloseFile(BatchFile);
FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;
blueshrimp
2003-06-05
打赏
举报
回复
用批处理吧,建一个临时批处理,退出时,执行这个批处理程序
hammer_shi
2003-06-05
打赏
举报
回复
有可能么?你能拿火柴将自己烧干净?
foilsman
2003-06-05
打赏
举报
回复
//转载,调用这个函数的程序在退出之后会自动删除Exe文件
procedure DeleteMe;
var
BatchFile : TextFile;
BatchFileName : String;
ProcessInfo : TProcessInformation;
StartUpInfo : TStartupInfo;
begin
BatchFileName := ChangeFileExt(ParamStr(0), '.bat');
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, ':try');
Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
Writeln(BatchFile, 'if exist "' + ParamStr(0) + '"' + ' goto try');
Writeln(BatchFile, 'del %0');
CloseFile(BatchFile);
FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil, PChar(BatchFileName), nil, nil, False, IDLE_PRIORITY_CLASS,
nil, nil, StartUpInfo, ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;
lovelymelon
2003-06-05
打赏
举报
回复
帮帮忙
一元云购源码云购源码夺宝 程序源码
一元云购源码云购源码夺宝 程序源码,3.17版本的。现在共享出来给大家研究,源码内图片删掉了,里面有点bug也需要自己解决,介意者请绕道
VC 如何使程序运行后自己
删除
自己
有时候,我们需要创建一个运行后能够自己
删除
自己的可执行程序即自
删除
程序。很明显如果一个进程通过直接调用DeleteFile()来
删除
自己是不可能的。必须另想办法,经过本人在网上参考很多资料后实际测试并集众家之所长...
基于python-Flask框架的社区信息交流平台(毕设)
文章列表:主要实现文章信息的
删除
,查看和编辑功能。管理员可以对用户发布的文章信息进行查看,对内容违规或者不合法的文章进行
删除
,对文章的不正当信息可以进行修改操作。 2.添加分类:主要实现分类信息的添加。...
删除
自身的shell脚本
注:脚本在远程执行环境下慎用在shell脚本执行玩了之后,能够自己
删除
自己.1) 在脚本中没有cd到其他的地方去 rm $02) 在脚本一开始就 _p_w_d=$(pwd)保存目录,最后cd _p_w_d rm_p_w_d rm 0
C++ 实现
删除
自己
#include <shellapi.h> #include <ShlObj.h> void DeleteAppSelf() { char szCommandLine[MAX_PATH + 10] = { 0 };... SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章