您使用AssignProcessToJobObject
,但在调试器运行时出现“访问被拒绝”的错误。为什么会这样?
您使用AssignProcessToJobObject
,但在调试器运行时出现“访问被拒绝”的错误。为什么会这样?
这个问题困扰了我大约30分钟。
首先,你可能需要在你的应用程序中嵌入UAC清单(如此处所建议的)。像这样:
<?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>
其次(这也是我遇到的问题),当您在调试器下运行应用程序时,它会在作业对象中创建您的进程。在将子进程分配给您的作业之前,您需要使其能够从该作业中脱离出来。因此,您需要在CreateProcess
的标志中指定CREATE_BREAKAWAY_FROM_JOB
。
如果您没有在调试器下运行,或者您的父进程已经在作业中,则不会发生这种情况。
这个问题似乎经常困扰我,虽然1800INFORMATION的文章很好,但它似乎没有包括一些有用的原因和解决方法,所以值得发表一份总结,说明我为什么会遇到这个问题。