デバッガーで実行すると、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>

2 番目に (これが私が行き詰まった部分です)、デバッガーでアプリを実行すると、ジョブ オブジェクト内にプロセスが作成されます。子プロセスをジョブに割り当てる前に、子プロセスから離脱できる必要があります。したがって、(当たり前ですが)次のように指定する必要があります CREATE_BREAKAWAY_FROM_JOB の旗の中で CreateProcess).

デバッガーの下で実行していないか、親プロセスがジョブ内にある場合、これは発生しなかったでしょう。

他のヒント

これはかなり頻繁に私を悩ませるようで、良いことですが、1800INFORMATION の投稿には役立つと思われる多くの理由や修正が含まれていないように見えるため、これが発生した理由の概要を投稿する価値があると思われます。

  1. 自分でこれを解決しようとするとき、CMD.exe、Explorer、およびVisual Studioから実行する場合、この問題がさまざまな理由で発生する可能性があることに注意してください。それぞれの場所から失敗した実行可能ファイルを実行しようとすると、問題の原因を特定するのに役立ちます。あなたのアプリは、vsから失敗しているにもかかわらず、cmd.exeからfindを使用するだけですおよび Explorer.exe
  2. 私の場合、Win7の下では、app.manifestファイルからのwin7の互換性を示す「supportedos」要素を解決する必要があるように見えました。これにより、エクスプローラーから実行する場合の問題が解決されるようです。マニフェストを追加するには、プロジェクトを右クリックし、追加して、「アプリケーションマニフェストファイル」を見つけます。
  3. Visual Studio 2010 を動作させるには、プログラム互換性アシスタントの使用を停止する必要があるようです。Tom Minka は、これを行う 2 つの方法をここで共有しています。 https://stackoverflow.com/a/4232259/86375, 彼の提案した変更を適用するには、VS2010 を再起動する必要があることに注意してください。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top