我得到了一个32位进程无法访问64位进程的模块。'异常调用Process.Start()

时间:2015-12-03 16:17:38

标签: c# cpu-architecture

以下是代码示例

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。我已经尝试了64位和32位版本的logman.exe(C:\ Windows \ SysWOW64 \ logman.exe和C:\ Windows \ System32 \ logman.exe),但我仍然有同样的错误。我的操作系统是Win8.1Prox64。什么可能导致问题?

堆栈追踪:

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

这是Build配置: enter image description here

2 个答案:

答案 0 :(得分:12)

平台目标选择任何CPU 是不够的,您还必须取消选中首选32位,否则应用程序仍将是作为32位应用程序运行。

这仅适用于应用程序项目,而不适用于库项目。如果您的项目是库,则必须使用库在项目中执行。

答案 1 :(得分:0)

经过调查我发现Logman.exe是非托管代码,因此无法将.NET对象作为MainModule返回,因此它是正常行为。我只是稍微混淆了Win32Exception的错误消息。它不会影响Process.Start()的执行。