Как 32-разрядный cmd.exe может запустить 64-разрядный cmd.exe в Windows Server 2003 x64?

Это продолжение разрешений на выполнение 7-Zip в 64-разрядной версии Windows Server 2008.

Я пытаюсь избежать слишком сложного процесса сборки для создания нескольких EXE-файлов 7-Zip. Мне просто нужен .cmd, чтобы запустить мой Java-процесс после прочтения некоторых 64-битных записей реестра. Однако для успешного использования одного EXE-файла он должен быть 32-битным.

В приведенном выше вопросе обнаружен трюк, позволяющий заставить Windows Server 2008 обнаружить 32-разрядный cmd.exe и заменить его на 64-разрядный. Есть ли способ сделать это в Windows Server 2003? Есть исправление Windows, которое позволяет reg.exe получать доступ к 64-битным записям в 32-битном режиме, но я не могу быть уверен, что это на сервере клиента, поэтому обходной путь не подходит.


person Minus Ex    schedule 10.12.2011    source источник


Ответы (1)


Чтобы запустить 64-разрядный cmd.exe из 32-разрядного cmd.exe, у вас должен быть доступ к папке c:\Windows\System32 без перенаправления в папку c:\Windows\SysWow64. В Win2008 этого можно добиться, открыв путь c:\Windows\Sysnative. К сожалению, для Win2003 требуется исправление (см. http://support.microsoft.com/kb/942589).

Существует обходной путь - вы можете создать точку соединения NTFS, которая направляет в папку c:\Windows\System32, и использовать путь к этой точке соединения вместо c:\Windows\System32. Используя junction.exe из System Internals, мне удалось создать такую ​​точку соединения из 32-битного cmd.exe и запустите 64-битный cmd.exe.

person MBu    schedule 10.01.2012
comment
Например, как проверить 64-битный реестр из 32-битного установщика: C: \ Windows \ sysnative \ reg.exe QUERY HKLM \ SOFTWARE \ JavaSoft \ JDK / v CurrentVersion - person JohnP2; 28.03.2018