【发布时间】:2010-09-10 12:21:47
【问题描述】:
您执行AssignProcessToJobObject 并失败并显示“访问被拒绝”,但仅当您在调试器中运行时。这是为什么呢?
【问题讨论】:
标签: c++ c winapi createprocess
您执行AssignProcessToJobObject 并失败并显示“访问被拒绝”,但仅当您在调试器中运行时。这是为什么呢?
【问题讨论】:
标签: c++ c winapi createprocess
这个让我困惑了大约 30 分钟。
首先,您可能需要在应用中嵌入 UAC 清单 (as suggested here)。像这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
其次(这是我坚持的一点),当您在调试器下运行应用程序时,它会在作业对象中创建您的进程。在您将其分配给您的工作之前,您的子进程需要能够脱离哪个。所以(duh),您需要在CreateProcess 的标志中指定CREATE_BREAKAWAY_FROM_JOB)。
如果您没有在调试器下运行,或者您的父进程正在工作,则不会发生这种情况。
【讨论】:
这似乎经常困扰我,虽然很好,但 1800INFORMATION 的帖子似乎没有包含许多似乎有用的原因和修复,所以似乎值得发布我看到这种情况发生的原因的摘要。
【讨论】: