当前位置: 首页 > 工具软件 > elevate > 使用案例 >

Elevate through ShellExecute or Elevate through manifest

卢永寿
2023-12-01

 

Elevate through ShellExecute (information from Microsoft)

We often get the question how to elevate a process through ShellExecute. From the docs it is not immediately clear. The trick is passing in "runas" in the lpVerb.

Here is a snippet to run notepad elevated.

#include "stdafx.h"
#include "windows.h"
#include "shellapi.h"


int _tmain(int argc, _TCHAR* argv[])
{
      SHELLEXECUTEINFO shExecInfo;

      shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

      shExecInfo.fMask = NULL;
      shExecInfo.hwnd = NULL;
      shExecInfo.lpVerb = L"runas";
      shExecInfo.lpFile = L"notepad.exe";
      shExecInfo.lpParameters = NULL;
      shExecInfo.lpDirectory = NULL;
      shExecInfo.nShow = SW_MAXIMIZE;
      shExecInfo.hInstApp = NULL;

      ShellExecuteEx(&shExecInfo);

      return 0;
}

Elevate through manifest

Manifest files

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

  <assemblyIdentity version="1.0.0.0"

     processorArchitecture="x86"

     name="IsUserAdmin"

     type="win32"/>

 

  <description>Description of your application</description>

  <!-- Identify the application security requirements. -->

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">

    <security>

      <requestedPrivileges>

        <requestedExecutionLevel

          level="requireAdministrator"

          uiAccess="FALSE"/>

        </requestedPrivileges>

       </security>

  </trustInfo>

</assembly>

 

notice:

maybe  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">

should be  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

you would insert manifest file into your project to compile.

Resource name: MANIFEST_RESOURCE_ID

Resource type: RT_MANIFEST

/

//

// RT_MANIFEST

//

 

MANIFEST_RESOURCE_ID   RT_MANIFEST    "application.exe.manifest"

 

 

 类似资料:

相关阅读

相关文章

相关问答