将当前可执行文件复制到另一个路径 C++(仅限 Windows)

Copy current executable to another path C++ (Windows only)

我忘记了如何用 C++ 编程,我希望我的可执行文件将自身复制到另一个路径。我找到了一个可以执行我想执行的操作的代码,但是存在我不知道如何解决的转换错误:

void Victim::replicate()
{
  char filename[ MAX_PATH ];
  char newLocation[]="C:\Users\myUsername\Desktop\";
  BOOL stats=0;
  DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );
  CopyFile(filename, newLocation, stats);
      
}

我在使用 CopyFile 函数时出错,它期望 filenamenewLocation[= 的 LPCWSTR 类型21=] 但是如果我将这些变量声明为 LPCWSTRGetModuleFileNameA 函数将不再起作用。

您的项目似乎默认设置为使用 API 函数的 W 版本。 您可以通过调用 GetModuleFileNameA (Ansi) 版本来覆盖它。不要 - 或者做,但是你还需要调用 CopyFileA.

强制使用 Ansi 版本:

void Victim::replicate()
{
  char filename[ MAX_PATH ];
  char newLocation[] = "C:\Users\myUsername\Desktop\";
  BOOL stats=0;
  DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );
  CopyFileA(filename, newLocation, stats);     
}

强制使用宽版本:

void Victim::replicate()
{
  wchar_t filename[ MAX_PATH ];
  wchar_t newLocation[] = L"C:\Users\myUsername\Desktop\";
  BOOL stats=0;
  DWORD size = GetModuleFileNameW( NULL, filename, MAX_PATH );
  CopyFileW(filename, newLocation, stats);     
}

使用项目默认值:

void Victim::replicate()
{
  TCHAR filename[ MAX_PATH ];
  TCHAR newLocation[] = _T("C:\Users\myUsername\Desktop\");
  BOOL stats=0;
  DWORD size = GetModuleFileName( NULL, filename, MAX_PATH );
  CopyFile(filename, newLocation, stats);     
}