【问题标题】:CreateProcess failed with error code '740' in Windows7 64bitCreateProcess 在 Windows7 64 位中失败,错误代码为“740”
【发布时间】:2012-10-27 10:28:06
【问题描述】:

我在 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:命名空间“urn:schemas-microsoft-com:asm.v2”中无法识别的元素“requestedPrivileges”。

问候, 尼克松

【问题讨论】:

  • CreateProcess函数的进程和线程属性填写了吗?你能告诉我们那个代码吗?您是否考虑过 ShellExecuteEx?
  • 实际上我的父应用程序正在启动 DCOM 服务器,我正在尝试从 DCOM 模块创建新进程。请参阅下面的代码部分。 `// 使用修改后的层信息创建流程 int nRetVal = CreateProcess( (LPSTR)strFullPath.c_str(), (LPSTR)strCmdLine.c_str(), 0, 0, FALSE, 0 , 0, (LPSTR)strWorkingDir.c_str( ), //NULL, &StartupInfo, &ProcInfo );'

标签: c++ windows-7 visual-studio-2005 uac


【解决方案1】:

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

更新:

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

【讨论】:

  • 你能详细说明你的答案吗?
【解决方案2】:

您遇到的错误描述了该问题:请求的操作需要提升。所以你必须从它开始:

  • 您确定您的父应用程序具有全部管理权限吗?
  • 您在启动时是否请求提升?

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多