16

Visual Studio からプロセスを開始すると、常にジョブ オブジェクト内に作成されます。この動作をオフにする方法を知りたいです。何か案は?

デバッグするジョブオブジェクトで作成されることを期待しています。プログラムを別のジョブ オブジェクトに配置したいと考えています。

ホスティングプロセスではありません。私はJob Objectについて話している。これはアンマネージ C++ アプリケーションです。

4

3 に答える 3

25

これは、devenv.exeまたはVSLauncher.exe互換モードで実行した場合に発生します。Program Compatibility Assistant (PCA)はジョブ オブジェクトを Visual Studio プロセスにアタッチし、すべての子プロセスがそれを継承します。ジョブ名 (Process Explorer によって報告される) がPCAで始まるかどうかを確認します。その場合、リンクで説明されているように PCA を無効にすることができます。

Run-> gpedit.msc-> Administrative Templates\Windows Components\Application Compatibility-> Turn off Program Compatibility Assistant- >を使用して、PCA をグローバルに無効にすることができますEnable

レジストリ エントリを追加することで、特定の実行可能ファイルの PCA を無効にすることができます。Windows 7 の場合、適切なレジストリ キーはHKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant. regedit で、そのキーを右クリックし、New->を選択しMulti-String Valueて、名前を付けExecutablesToExcludeます。値を と のフル パスに設定し、denenv.exe別々VSLauncher.exeの行で引用符を付けません。私にとって、これらは次のとおりです。

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VSLauncher.exe

関連する問題として、Windows 7 では、Visual Studio でビルドし、エクスプローラー (Visual Studio やコマンド ラインではなく) から実行する実行可能ファイルが互換モードで実行され、再びジョブ オブジェクトがラップされる可能性があります。これを防ぐには、新しいアプリケーション マニフェストの互換性セクションを使用して、Windows 7 との互換性を宣言するマニフェストが実行可能ファイルに必要です。このリンクは、Windows 7 と互換性のあるマニフェストの例を示しています。Visual Studio 2010 によって提供される既定のマニフェストには、この互換性セクションが含まれていません。

于 2010-11-20T10:25:41.767 に答える
1

VS.NETによるデバッグ用に生成されたプロセスのこの側面を制御する方法を私は知りません。ただし、回避策があります。これは、VS.NETが希望どおりの方法でプロセスを開始できない、または開始できない状況に適用できます。

プロセスを開始し(おそらく、ビルド後のイベントの一部として実行されるラッパーEXEを使用して)、[ツール]/[プロセスにアタッチ]を使用して新しく開始されたプロセスにアタッチします。スタートアップコードの一部としてデバッガーに侵入した場合、これは必要ありません(また、スタートアップの問題をデバッグすることもできます...)。

于 2008-09-18T14:32:06.150 に答える
1

あなたが見ているものを再現することはできません。VS 2005 と VS 2008 の両方でアンマネージ C++ アプリケーションを作成しましたが、VS でプロセスを開始するときに、そのプロセスを新しいジョブ オブジェクトに関連付けるのに問題はありません。

デバッガーがこれを実行していると確信していますか?

于 2008-09-18T14:51:08.410 に答える