最近,我在S.O.读了一篇文章。该公司声称具有在执行文件后删除文件的解决方案,并提供了一些执行此操作的代码。
然后我发现它是用C编写的,并使用了一个名为strsafe.h的库,我在其他一些论坛上也读过它,它是Visual库,在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();
}
最佳答案
<strsafe.h>
中唯一的功能是StringCbPrintf
,您可以将其替换为wsprintf
//StringCbPrintf(szCmd, 2 * MAX_PATH, SELF_REMOVE_STRING, szModuleName);
wsprintf(szCmd, SELF_REMOVE_STRING, szModuleName);
但是,由于使用了Windows本机功能,您将无法轻松地将其移植到其他平台。
关于c++ - 从C到C++的转换避免了<strsafe.h>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38201953/