web-dev-qa-db-ja.com

「32ビットプロセスは64ビットプロセスのモジュールにアクセスできません」というメッセージが表示されます。 Process.Start()を呼び出す例外

これがコードサンプルです

var startInfo = new ProcessStartInfo
{
    Arguments = commandStr,
    FileName = @"C:\Windows\SysWOW64\logman.exe",
};

using (var createCounterProc = new Process { StartInfo = startInfo })
{
    createCounterProc.Start();
    createCounterProc.WaitForExit();
}

コードを実行した後、「32ビットプロセスは64ビットプロセスのモジュールにアクセスできません」というメッセージが表示されます。 MainModuleのメッセージ(NativeErrorCode:299)。私のソリューションはAnyCPUに設定されています。 logman.exeの64ビットバージョンと32ビットバージョン(C:\ Windows\SysWOW64\logman.exeおよびC:\ Windows\System32\logman.exe)の両方を試しましたが、それでも同じエラーが発生します。私のOSはWin8.1Prox64です。何が問題を引き起こす可能性がありますか?

スタックトレース:

at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
   at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)
   at System.Diagnostics.Process.get_MainModule()

ビルド構成は次のとおりです。 ここにイメージの説明を入力してください

10
Max

プラットフォームターゲット任意のCPUを選択するだけでは不十分であり、次のことも行う必要があります。チェックを外します32ビットを優先します、そうでない場合、アプリケーションは引き続き32ビットアプリケーションとして実行されます。

これはアプリケーションプロジェクトでのみ可能であり、ライブラリプロジェクトでは不可能です。プロジェクトがライブラリの場合は、ライブラリを使用してプロジェクトで実行する必要があります。

18
Albireo

調査の結果、Logman.exeはアンマネージコードであるため、.NETオブジェクトをMainModuleとして返すことができないため、正常な動作であることがわかりました。 Win32Exceptionのエラーメッセージを少し混乱させます。 Process.Start()の実行には影響しません。

0
Max