最近,我在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/

10-10 21:40