Запуск 64-битного исполняемого файла в System32 из 32-битного кода

Я пытаюсь запустить исполняемый файл из 32-разрядного приложения C# (в 64-разрядной ОС), но получаю сообщение "Системе не удается найти указанный файл", вероятно, потому что wsqmcons.exe не существует в C:\Windows\Syswow64. Файл существует в System32. Каков наилучший способ запустить wsqmcons.exe из кода, если это возможно?

Process p = new Process();
p.StartInfo.Arguments = "-f";
p.StartInfo.FileName = @"C:\Windows\System32\wsqmcons.exe";
p.Start();
p.WaitForExit();
Verify.AreEqual(0, p.ExitCode);

2 ответа

Вам нужно будет отключить перенаправление файловой системы на 32-битном процессе с помощью Wow64DisableWow64FsRedirection и повторно включить его с помощью Wow64RevertWow64FsRedirection.

64-разрядный исполняемый файл, расположенный в папке %windir%\System32, не может быть запущен из 32-разрядного процесса, поскольку перенаправитель файловой системы перенаправляет путь к % windir% \ SysWOW64. Не отключайте перенаправление для достижения этой цели; используйте вместо этого %windir%\Sysnative. Для получения дополнительной информации см. Redirector File System.

Цитата из http://msdn.microsoft.com/en-us/library/windows/desktop/aa384203%28v=vs.85%29.aspx

Другие вопросы по тегам