AssignProcessToJobObject falha com o erro “Acesso negado” ao executar sob o depurador

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Você faz AssignProcessToJobObject e falhar com "acesso negado" mas só quando você estiver executando no depurador. Por que isso?

Foi útil?

Solução

Esta me intrigou por cerca de 30 minutos.

Primeiro, você provavelmente precisará de um UAC manifesto incorporado em seu aplicativo ( como sugerido aqui ). Algo parecido com isto:

<?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>

Em segundo lugar (e esta é a pouco eu fiquei preso por diante), quando você estiver executando o seu aplicativo sob o depurador, ele cria seu processo em um objeto de trabalho. Qual o seu processo de criança precisa ser capaz de ruptura com antes que você pode atribuí-lo ao seu trabalho. Então (duh), você precisa especificar CREATE_BREAKAWAY_FROM_JOB nas bandeiras para CreateProcess).

Se você não estavam funcionando sob o depurador, ou o seu processo pai estavam no trabalho, isso não teria acontecido.

Outras dicas

Isto parece-me morder, muitas vezes, e enquanto bom, pós 1800INFORMATION do não parece incluir um número de razões e correções que parecem úteis, por isso parece valer a pena para deixar um resumo de por que eu já vi isso acontecer.

  1. Ao tentar resolver isso por si mesmo, nota que este problema pode ocorrer por diferentes motivos ao executar a partir CMD.EXE, Explorer, e Visual Studio. Tentando executar o arquivo executável com defeito do respectivos lugares pode ajudar a identificar a causa do problema. Vocês aplicativo pode trabalhar apenas encontrar a partir CMD.EXE apesar de não partir V.S. e explorer.exe
  2. No meu caso, sob Win7, eu parecia precisar para un-comment os "supportedOS" elemento indicador compatibilidade Win7 do app.manifest Arquivo. Isto parece resolver o problema durante a execução do Explorer. Para adicionar um manifesto, clique direito sobre o projeto, hit Adicionar e encontrar 'Arquivo manifesto de aplicativo'.
  3. Para obter o Visual Studio 2010 de trabalho, eu parecia precisar de parar de usar o Assistente de compatibilidade de programas, ações Tom Minka duas maneiras de fazer isso aqui: https://stackoverflow.com/a/4232259/86375 , nota, eu tive que reiniciar VS2010 para levar suas mudanças sugeridas.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top