AssignProcessToJobObject завершается с ошибкой «Отказано в доступе» при работе под отладчиком - PullRequest
19 голосов
/ 18 сентября 2008

Вы делаете AssignProcessToJobObject, и он завершается с ошибкой «доступ запрещен», но только когда вы работаете в отладчике. Почему это?

Ответы [ 2 ]

20 голосов
/ 18 сентября 2008

Этот озадачил меня на 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>

Во-вторых (и на этом я застрял), когда вы запускаете свое приложение под отладчиком, оно создает ваш процесс в объекте задания. От чего ваш дочерний процесс должен быть в состоянии оторваться, прежде чем вы сможете назначить его на свою работу. Итак (да), вам нужно указать CREATE_BREAKAWAY_FROM_JOB в флагах для CreateProcess).

Если бы вы не работали под отладчиком, или ваш родительский процесс работал, этого бы не произошло.

5 голосов
/ 09 февраля 2012

Это, кажется, кусает меня довольно часто, и, хотя это хорошо, пост 1800INFORMATION, похоже, не содержит ряда причин и исправлений, которые кажутся полезными, поэтому стоит опубликовать краткое изложение того, почему я видел, как это произошло.

  1. При попытке решить это для себя, обратите внимание, чем эта проблема может произойти по разным причинам при запуске из CMD.EXE, Explorer, и Visual Studio. Попытка запустить сбой исполняемого файла из соответствующие места могут помочь определить причину проблемы. Вы приложение может просто работать найти из CMD.EXE, несмотря на сбой из V.S. и Explorer.exe
  2. В моем случае, под Win7, мне, казалось, нужно было снять комментарий с «supportOS» элемент, указывающий на совместимость Win7 из app.manifest файл. Кажется, это решает проблему при запуске из Проводника. к добавьте манифест, щелкните правой кнопкой мыши на проекте, нажмите «Добавить» и найдите «Файл манифеста приложения».
  3. Чтобы заставить Visual Studio 2010 работать, мне, кажется, нужно было не использовать помощника по совместимости программ. Том Минка делится двумя способами: https://stackoverflow.com/a/4232259/86375, обратите внимание, мне пришлось перезапустить VS2010, чтобы взять его предлагаемые изменения.
...