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, чтобы внести предложенные изменения.