1

我在 Windows 7 64 位平台上使用 VS2005。我的一个应用程序正在尝试使用CreateProcessAPI 创建一个新进程。创建进程时,API 返回错误 0。我使用检查错误代码GetLastError(),我得到740请求的操作需要提升。尝试创建新进程的应用程序具有管理权限。

我使用以下代码创建流程:

// Create the process using modified stratup info
int nRetVal = CreateProcess( (LPSTR)strFullPath.c_str(),
                             (LPSTR)strCmdLine.c_str(),
                             0, 0, FALSE, 0 , 0,
                             (LPSTR)strWorkingDir.c_str(),
                             //NULL,
                             &StartupInfo, &ProcInfo );

如何在不关闭 UAC 的情况下从我的应用程序启动新进程?

在构建父应用程序时,我收到以下警告:

App.manifest:清单创作警告 81010002:命名空间“urn:schemas-microsoft-com:asm.v2”中无法识别的元素“requestedPrivileges”。

问候,尼克松

4

2 回答 2

3

尝试使用ShellExecute()函数而不是CreateProcess()

更新:

  • CreateProcess()创建一个具有相同权限的子进程,它是最底层的 API
  • ShellExecute/Ex()将进程创建委托给 shell(可以检测应用程序是否需要权限)。如果清单允许以非管理员身份运行应用程序,则传递lpOperation=L"runas"以手动提升它
  • _wsystem()创建一个新cmd.exe /c app.exe进程(我猜是通过CreateProcess),从而将进程创建委托给命令提示符
于 2015-11-23T16:56:05.353 回答
2

您遇到的错误描述了该问题:The Requested Operation Requires Elevation。所以你必须从它开始:

  • 您确定您的父应用程序具有完整的管理权限吗?
  • 当你启动它时它是否请求提升?

由于您在构建它时收到警告,因此您必须有一个无效的清单。UAC清单没有requestedPrivileges元素,而是requestedExecutionLevel

<requestedExecutionLevel
    level="asInvoker|highestAvailable|requireAdministrator"
    uiAccess="true|false"
/>
于 2012-11-08T06:28:18.937 回答