Отключение перенаправления файлов - дело опасное. Вы делаете это здесь, чтобы ваш 32-битный процесс мог видеть файл, расположенный в system32
. Обычно любая ссылка на эту папку из 32-битного процесса будет перенаправлена на SysWOW64
. Но, как вы обнаружили, отключение перенаправления файлов разрывает другие ссылки в цепочке.
Лучшее из известных мне решений - использовать специальный псевдоним %windir%\sysnative
, чтобы найти истинный каталог system32. Не отключайте перенаправление файлов и просто передавайте %windir%\sysnative\sdclt.exe
при запуске процесса.
Документация для перенаправления файлов гласит:
32-разрядные приложения могут получить доступ к собственному системному каталогу, заменив% windir% \ Sysnative на% windir% \ System32. WOW64 распознает Sysnative как специальный псевдоним, используемый для указания того, что файловая система не должна перенаправлять доступ. Этот механизм является гибким и простым в использовании, поэтому он является рекомендуемым механизмом для обхода перенаправления файловой системы. Обратите внимание, что 64-разрядные приложения не могут использовать псевдоним Sysnative, поскольку это виртуальный каталог, а не реальный.
Windows Server 2003 и Windows XP : псевдоним Sysnative был добавлен начиная с Windows Vista.
Последнее предупреждение фактически означает, что %windir%\Sysnative
не распознается в XP64, если только машина не обслуживалась с помощью исправления MS, которое соответствует %windir%\Sysnative
этой ОС. На практике это не имеет значения, потому что установленная база XP64 очень мала.
Единственное другое решение, которое мне известно, - это создать свой собственный выделенный модуль запуска, который является 64-битным процессом. Если вы поместите этот модуль запуска в папку, которая не подлежит перенаправлению файлов, вы можете вызвать этот модуль запуска из 32-разрядного процесса, и тогда средство запуска сможет увидеть 64-разрядный системный каталог. Я думаю, что вам придется использовать этот подход, если вам нужно поддерживать XP64.