创建进程失败,错误代码'740' Windows7 64 位



我在Windows 7 64位平台中使用VS2005。我的应用程序之一是尝试使用CreateProcess API创建一个新过程。在创建过程时,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:命名空间中未识别的元素"请求privileges"。

问候,尼克松

尝试使用ShellExecute()功能而不是CreateProcess()

更新:

  • CreateProcess()创建一个具有相同权限的儿童过程,它是最低级别的API
  • ShellExecute/Ex()将过程创建委托给Shell(可以检测应用程序是否需要特权)。如果清单允许运行应用程序为非Admin,请通过lpOperation=L"runas"手动提升
  • _wsystem()创建一个新的cmd.exe /c app.exe进程(我猜是通过CreateProcess),从而将过程创建委托给命令提示符

您已经描述了问题的错误:请求的操作需要高程。因此,您必须从它开始:

  • 您是否确定您的父申请具有完整管理权?
  • 发布时是否要求高程?

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

<requestedExecutionLevel
    level="asInvoker|highestAvailable|requireAdministrator"
    uiAccess="true|false"
/>

相关内容

最新更新