从C转换为C ++避免<strsafe.h>

时间:2016-07-05 11:10:07

标签: c++ c

最近我在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();
}

1 个答案:

答案 0 :(得分:0)

此处{Any 2 Letters}-{Any 2 Letters}-{AnyAmountOfNumbers}的唯一功能是<strsafe.h>,您可以将其替换为StringCbPrintf

wsprintf

但是,由于使用了Windows本机功能,您将无法轻松将其移植到其他平台。