AssignProcessToJobObject non riesce con l'errore "Accesso negato" durante l'esecuzione nel debugger

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

  •  01-07-2019
  •  | 
  •  

Domanda

Fate AssignProcessToJobObject e fallisce con "accesso negato" ma solo quando sei in esecuzione nel debugger.Perchè è questo?

È stato utile?

Soluzione

Questo mi ha lasciato perplesso per circa 30 minuti.

Prima di tutto, probabilmente avrai bisogno di un manifest UAC incorporato nella tua app (come suggerito qui).Qualcosa come questo:

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

In secondo luogo (e questo è il punto su cui mi sono bloccato), quando esegui la tua app nel debugger, crea il tuo processo in un oggetto lavoro.Da cui il processo figlio deve essere in grado di staccarsi prima di poterlo assegnare al tuo lavoro.Quindi (duh), è necessario specificare CREATE_BREAKAWAY_FROM_JOB nelle bandiere per CreateProcess).

Se non fossi in esecuzione nel debugger o se il tuo processo principale fosse coinvolto nel lavoro, ciò non sarebbe accaduto.

Altri suggerimenti

Questo sembra tormentarmi abbastanza spesso e, sebbene positivo, il post di 1800INFORMATION non sembra includere una serie di ragioni e soluzioni che sembrano utili, quindi sembra utile pubblicare un riepilogo del motivo per cui ho visto ciò accadere.

  1. Quando si cerca di risolverlo da solo, nota che questo problema può verificarsi per diversi motivi quando si esegue da cmd.exe, explorer e Visual Studio.Cercare di eseguire l'eseguibile in fallimento dai rispettivi luoghi può aiutare a identificare la causa del problema.La tua app potrebbe funzionare semplicemente da cmd.exe nonostante il fallimento da VSed Explorer.exe
  2. Nel mio caso, sotto Win7, mi è sembrato di non commettere l'elemento "supportati" che indica la compatibilità di Win7 dal file App.Manifest.Questo sembra risolvere il problema durante l'esecuzione da Explorer.Per aggiungere un manifest, fare clic con il pulsante destro del mouse sul progetto, premere Aggiungi e trova "File manifest dell'applicazione".
  3. Per far funzionare Visual Studio 2010, sembrava necessario impedirgli di utilizzare la Risoluzione problemi compatibilità programmi. Tom Minka condivide due modi per farlo qui: https://stackoverflow.com/a/4232259/86375, nota, ho dovuto riavviare VS2010 per apportare le modifiche suggerite.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top