有没有修改系统底层文件访问模式的方法删除正在运行的程序。

DragonFly_1976 2004-09-16 03:58:48
我作了个程序,现在想在程序运行过程中删除自身,是用系统底层文件访问模式的方法而不是利用运行拷贝进程方法,谁有相关的资料或主要代码,谢谢。
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
DragonFly_1976 2004-09-17
  • 打赏
  • 举报
回复
rainstormmaster(暴风雨 v2.0) ,alon21(飘一族.Alon)
谢谢你们的代码,删除文件没有问题。
可现在还有最后一个问题,是我想在程序运行时删除运行文件,而程序不退出。
上面的代码怎么把我的程序退出了。
代码是在按钮中。
解决问题后,立刻结。
alon21 2004-09-16
  • 打赏
  • 举报
回复
//删除自己的程序
#include <windows.h>

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;
}

win2k下测试通过,上面的代码在图形界面中也测试通过(将代码加在了按钮中,还有App类的ExitInstance()函数中)
rainstormmaster 2004-09-16
  • 打赏
  • 举报
回复
http://vip.6to23.com/nowcan1/tech/m01.htm
gooyan 2004-09-16
  • 打赏
  • 举报
回复
mark
DragonFly_1976 2004-09-16
  • 打赏
  • 举报
回复
DentistryDoctor(牙科医生)谢谢您的代码,但是删除后按f5又有了。麻烦你测试一下,这是为什么?
DentistryDoctor 2004-09-16
  • 打赏
  • 举报
回复
http://www.codeguru.com/Cpp/W-P/win32/article.php/c4533/
DentistryDoctor 2004-09-16
  • 打赏
  • 举报
回复
现在想在程序运行过程中删除自身,是用系统底层文件访问模式的方法?

BOOL SelfDelete()
{
SHELLEXECUTEINFO sei;

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

// get file path names:
if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))
{
// set command shell parameters
lstrcpy(szParams,"/c del ");
lstrcat(szParams, szModule);
lstrcat(szParams, " > nul");

// set struct members
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;

// increase resource allocation to program
SetPriorityClass(GetCurrentProcess(),
REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_TIME_CRITICAL);

// invoke command shell
if(ShellExecuteEx(&sei))
{
// suppress command shell process until program exits
SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
SetProcessPriorityBoost(sei.hProcess,TRUE);

// notify explorer shell of deletion
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
return TRUE;
}
else // if error, normalize allocation
{
SetPriorityClass(GetCurrentProcess(),
NORMAL_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_NORMAL);
}
}
return FALSE;
}
DentistryDoctor 2004-09-16
  • 打赏
  • 举报
回复
http://www.codeguru.com/Cpp/W-P/files/fileio/article.php/c1287/

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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