实现步骤:
- 打开main.cpp($project\windows\runner\main.cpp)
- 在程序入口处定义两个方法
BOOL isRunAsAdmin();
void runAsAdmin();
- 实现isRunAsAdmin
BOOL isRunAsAdmin() {
BOOL isRunAsAdmin = FALSE;
HANDLE hToken = NULL;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
return FALSE;
}
TOKEN_ELEVATION tokenEle;
DWORD dwRetLen = 0;
if (GetTokenInformation(hToken, TokenElevation, &tokenEle, sizeof(tokenEle), &dwRetLen))
{
if (dwRetLen == sizeof(tokenEle))
{
isRunAsAdmin = tokenEle.TokenIsElevated;
}
}
CloseHandle(hToken);
return isRunAsAdmin;
}
4.实现 runAsAdmin
void runAsAdmin() {
WCHAR czFileName[1024] = { 0 };
GetModuleFileName(NULL, czFileName, _countof(czFileName) - 1);
SHELLEXECUTEINFO EI;
memset(&EI, 0, sizeof(EI));
EI.cbSize = sizeof(SHELLEXECUTEINFO);
EI.lpVerb = TEXT("runas");
EI.fMask = 0x00000040;
EI.lpFile = czFileName;
EI.nShow = SW_SHOW;
ShellExecuteEx(&EI);
}
5.在wWinMain函数下使用
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
_In_ wchar_t *command_line, _In_ int show_command) {
if (!isRunAsAdmin()) {
runAsAdmin();
exit(0);
}
...
...
}