最近我在S.O.阅读了这篇文章。声称拥有执行后删除文件的解决方案,提供了一些代码来执行此操作。
然后我发现它是用C语言编写的,并使用了一个名为strsafe.h的库,我在其他一些可视化库的论坛中读过它,但它并不适用于C ++。
在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 \"%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();
}
答案 0 :(得分:0)
此处{Any 2 Letters}-{Any 2 Letters}-{AnyAmountOfNumbers}
的唯一功能是<strsafe.h>
,您可以将其替换为StringCbPrintf
wsprintf
但是,由于使用了Windows本机功能,您将无法轻松将其移植到其他平台。