AssignProcessToJobObject завершается с ошибкой «Доступ запрещен» при запуске под отладчиком

StackOverflow https://stackoverflow.com/questions/89588

  •  01-07-2019
  •  | 
  •  

Вопрос

Вы делаете 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>

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

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

Другие советы

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

  1. При попытке решить это для себя, обратите внимание, чем эта проблема может возникнуть по разным причинам при работе от CMD.Exe, Explorer и Visual Studio.Попытка запустить неудачный исполняемый файл из соответствующих мест может помочь определить причину проблемы.Приложение может просто работать на Cmd.exe, несмотря на неудачу от VSи Explorer.exe
  2. В моем случае, в соответствии с Win7, мне, казалось, нужно было разместить элемент «поддержки», указывающий на совместимость Win7 из файла App.Manifest.Кажется, это решает проблему при запуске из Проводника.Чтобы добавить манифест, щелкните правой кнопкой мыши на проект, нажмите «Добавить» и найдите «Файл манифеста приложения».
  3. Чтобы заставить Visual Studio 2010 работать, мне, похоже, нужно было запретить ей использовать Помощник по совместимости программ. Том Минка рассказывает здесь о двух способах сделать это: https://stackoverflow.com/a/4232259/86375, Обратите внимание: мне пришлось перезапустить VS2010, чтобы принять предложенные им изменения.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top