如何用C++编写程序,以便在执行后自行删除?

Sau*_*ius 22 c++

如何用C++编写程序,以便在执行后自行删除?

gti*_*kok 21

这是C中的代码,它将在执行后删除可执行文件.

#include <Windows.h>
#include <strsafe.h>

#define SELF_REMOVE_STRING  TEXT("cmd.exe /C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del /f /q \"%s\"")

void DelMe()
{
    TCHAR szModuleName[MAX_PATH];
    TCHAR szCmd[2 * MAX_PATH];
    STARTUPINFO si = {0};
    PROCESS_INFORMATION pi = {0};

    GetModuleFileName(NULL, szModuleName, MAX_PATH);

    StringCbPrintf(szCmd, 2 * MAX_PATH, SELF_REMOVE_STRING, szModuleName);

    CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);

    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
}

void main()
{
    /* Do what you need */

    /* Call this function at the very end of your program to delete itself */
    DelMe();
}
Run Code Online (Sandbox Code Playgroud)


jan*_*anm 6

在 Unix 上,只需对可执行文件调用 unlink(2) 即可。

在 Windows 上,您需要第二个进程来帮助您。st0le 的响应似乎是取消链接 DLL,但对于可执行文件,您需要启动第二个进程或使用现有进程,然后终止可执行文件并让第二个进程执行删除操作。

一个非常简单的方法是使用 cmd.exe 来提供帮助。

使用任何其他进程的推测方法可能是在另一个进程中分配一些内存,并将要删除的文件名放在那里,然后使用 CreateRemoteThread() 在远程进程中创建一个挂起的线程,其入口点为带有参数的 DeleteFile指向您分配的内存的指针。然后退出进程,线程挂起计数应该递减,然后调用 DeleteFile 来删除文件。

问题:远程进程内存泄漏,混乱。

一种更简单的方法可能就是使用 st0le 的答案中的技术获得一个支持 DLL。


st0*_*0le 5

一些方法

你也可以使用某种计划任务......