代码之家  ›  专栏  ›  技术社区  ›  1800 INFORMATION

在调试器下运行时,AssignProcessToJobObject失败,出现“拒绝访问”错误

  •  19
  • 1800 INFORMATION  · 技术社区  · 18 年前

    是吗 AssignProcessToJobObject 并且只有在调试器中运行时,它才会在“拒绝访问”的情况下失败。为什么会这样?

    2 回复  |  直到 18 年前
        1
  •  22
  •   Community Mohan Dere    9 年前

    这件事让我困惑了大约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),您需要指定 CREATE_BREAKAWAY_FROM_JOB 在国旗上 CreateProcess ).

        2
  •  5
  •   Community Mohan Dere    9 年前

    这似乎经常困扰着我,虽然很好,但1800INFORMATION的帖子似乎没有包含一些似乎有用的原因和修复方法,因此似乎值得发布一篇我看到这种情况的原因总结。

    1. 从CMD.EXE、资源管理器、, 尽管从V.S.失败,但应用程序可能仅从CMD.EXE查找。 和Explorer.exe
    2. 文件这似乎可以解决从资源管理器运行时的问题。到 添加清单,右键单击项目,点击add,然后查找
    3. 为了让Visual Studio 2010正常工作,我似乎需要阻止它使用程序兼容性助手,Tom Minka在这里分享了两种方法: https://stackoverflow.com/a/4232259/86375 ,注意,我必须重新启动VS2010以接受他的建议更改。
    推荐文章