20

実行するAssignProcessToJobObjectと、「アクセスが拒否されました」で失敗しますが、デバッガーで実行している場合のみです。どうしてこれなの?

4

2 に答える 2

22

これは約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)。

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

于 2008-09-18T02:52:38.640 に答える
5

1800INFORMATION の投稿には、役立つと思われる多くの理由と修正が含まれていないようです。そのため、なぜこのようなことが起こったのかをまとめて投稿する価値があると思われます。

  1. これを自分で解決しようとする場合、CMD.EXE、Explorer、および Visual Studio から実行すると、さまざまな理由でこの問題が発生する可能性があることに注意してください。それぞれの場所から失敗した実行可能ファイルを実行しようとすると、問題の原因を特定するのに役立ちます。VS および Explorer.exe からの失敗にもかかわらず、アプリは CMD.EXE からの検索だけで機能する場合があります。
  2. 私の場合、Win7 では、app.manifest ファイルから Win7 互換性を示す「supportedOS」要素のコメントを外す必要があるようでした。これにより、エクスプローラーから実行する際の問題が修正されるようです。マニフェストを追加するには、プロジェクトを右クリックして [追加] をクリックし、[アプリケーション マニフェスト ファイル] を見つけます。
  3. Visual Studio 2010 を機能させるには、Program Compatibility Assistant の使用を停止する必要があるように思われました。Tom Minka は、これを行う 2 つの方法をここで共有しています: https://stackoverflow.com/a/4232259/86375、注意してください。 VS2010 を再起動して、提案された変更を適用します。
于 2012-02-08T20:32:03.730 に答える