AssignProcessToJobObject с ошибкой "Отказано в доступе" при запуске под отладчиком

Вы выполняете AssignProcessToJobObject, и он не работает с "access denied", но только при запуске в отладчике. Почему это?

Ответы

Ответ 1

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

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

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

Ответ 2

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

  • При попытке решить это для себя обратите внимание на эту проблему может происходить по разным причинам при запуске из CMD.EXE, Explorer, и Visual Studio. Попытка запустить исполняемый файл с ошибкой соответствующие места могут помочь определить причину проблемы. Вы приложение может просто найти находку из CMD.EXE, несмотря на неудачу с В.С. и Explorer.exe
  • В моем случае, под Win7, мне, казалось, нужно было отменить комментарий "supportedOS" элемент, указывающий совместимость с Win7 от приложения. файл. Похоже, проблема устранена при работе с Explorer. к добавить манифест, щелкнуть правой кнопкой мыши по проекту, нажать "Добавить" и найти "Файл манифеста приложений".
  • Чтобы заставить Visual Studio 2010 работать, мне, казалось, нужно было остановить его от использования помощника по совместимости программ, Том Минка разделяет два способа сделать это здесь: fooobar.com/info/8653/..., заметьте, мне пришлось перезапустить VS2010, чтобы внести предложенные изменения.