【问题标题】:AssignProcessToJobObject fails with "Access Denied" error when running under the debugger在调试器下运行时,AssignProcessToJobObject 失败并出现“拒绝访问”错误
【发布时间】:2010-09-10 12:21:47
【问题描述】:

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

【问题讨论】:

    标签: c++ c winapi createprocess


    【解决方案1】:

    这个让我困惑了大约 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)。

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

    【讨论】:

      【解决方案2】:

      这似乎经常困扰我,虽然很好,但 1800INFORMATION 的帖子似乎没有包含许多似乎有用的原因和修复,所以似乎值得发布我看到这种情况发生的原因的摘要。

      1. 尝试自己解决此问题时,请注意此问题 从 CMD.EXE、资源管理器、 和视觉工作室。尝试从 各个地方可以帮助确定问题的原因。你 尽管 V.S. 失败,应用程序可能只能从 CMD.EXE 中找到。 和 Explorer.exe
      2. 在我的情况下,在 Win7 下,我似乎需要取消注释“supportedOS” 从 app.manifest 指示 Win7 兼容性的元素 文件。这似乎解决了从资源管理器运行时的问题。到 添加清单,右键单击项目,点击添加,然后找到 “应用程序清单文件”。
      3. 为了让 Visual Studio 2010 正常工作,我似乎需要阻止它使用程序兼容性助手,Tom Minka 在这里分享了两种方法:https://stackoverflow.com/a/4232259/86375,注意,我必须重新启动 VS2010 才能接受他建议的更改.

      【讨论】:

        猜你喜欢
        • 2015-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 2012-05-02
        • 2022-12-10
        • 1970-01-01
        相关资源
        最近更新 更多