您执行AssignProcessToJobObject,它失败并显示“访问被拒绝”,但仅当您在调试器中运行时才如此。为什么是这样?

最佳答案

这个让我困惑了大约30分钟。

首先,您可能需要在您的应用程序(as suggested here)中嵌入一个UAC list 。像这样:

<?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),您需要在CREATE_BREAKAWAY_FROM_JOB的标志中指定CreateProcess

如果您不在调试器下运行,或者您的父进程在工作中,则不会发生这种情况。

09-26 02:29