Почему 64-разрядная версия Windows Vista использует 32-разрядную версию cmd.exe по умолчанию?(для конкретной машины)
-
22-08-2019 - |
Вопрос
Ситуация:
Мне нужно преобразовать нашу текущую среду разработки с 32-разрядной версии Windows XP на 64-разрядную версию Windows Vista (*).Естественно, я сталкивался со множеством мест в нашей системе сборки, где жестко закодированные пути были проблематичными (например"C:\Program Files
" становление "C:\Program Files (x86)
").К счастью, существует %ProgramFiles%
переменная среды, которая сопоставляется с соответствующим каталогом на основе исходного процесса (32-разрядный или 64-разрядный).Поэтому я обновил скрипты сборки с помощью %ProgramFiles%
, и я был уверен, что на этом все закончится.
Среда сборки вызывается из командной строки (C:\Windows\System32\cmd.exe
).
Проблема:
На одной конкретной машине (а именно на моей рабочей машине разработчика) оказывается, что C:\Windows\System32\cmd.exe
на самом деле это 32-битный процесс, поэтому скрипты находят x86
версия самого Program Files
каталог, и все работает отлично.
На любой другой 64-битной машине, которую я могу найти (включая мою домашнюю машину), C:\Windows\System32\cmd.exe
является 64-битной версией, а 32-битная версия находится в C:\Windows\SysWow64\cmd.exe
.Таким образом, сценарии сборки не могут найти ничего, что они ищут, и терпят неудачу.
Теперь я понимаю, что 32-битный cmd.exe
должен быть вызван явно, если это то, что вам нужно, и по умолчанию вы получаете 64-битный cmd.exe
.Типичный случай WORKSFORME
...
Вопрос в том,, что случилось с машиной, где это не соответствует действительности?Почему я получаю 32-битный cmd.exe
по умолчанию на одной машине, но не на других?Во всех случаях я явно выполняю C:\Windows\System32\cmd.exe
из Start|Run
меню, но получаю разные результаты только на одной машине.Все они работают под управлением одной и той же версии Vista 64bit.
Есть какие-нибудь мысли или озарение?
(*) Пожалуйста, примите, что я должен сделай это.Я не имею права говорить почему Я делаю это.Переустановка ОС и всего с нуля, вероятно, сработала бы, но это, безусловно, излишество.Кроме того, было достаточно сложно убедить наш ИТ-отдел выдать компьютеры Vista!
Решение 2
Я, наконец, нашел проблему, и, как и ожидалось, это довольно просто:ошибка пользователя.Проводник (который сам по себе является 64-разрядным процессом в 64-разрядной версии Windows Vista) по умолчанию запускает 64-разрядные командные подсказки.Если вы хотите 32-разрядный CMD.EXE
, вы должны явно ссылаться C:\Windows\SysWoW64\CMD.EXE
.
Причина, по которой это отлично работало в моей системе, заключается в том, что я использую Far Manager для большей части использования командной строки, которая является 32-разрядной (поэтому она запускает 32-разрядные командные подсказки).Когда я проверял, я, должно быть, перепутал 32-разрядное окно с 64-разрядным (в конце концов, они выглядят одинаково!) и задал глупый вопрос.
Умереть в Сенте, проблема с %ProgramFiles(x86)%
заключается в том, что он не существует в 32-разрядной версии Windows Vista, потому что это было бы действительно проще.
Ах, нет ничего лучше публичного сообщения, чтобы выставить себя дураком...:)
Другие советы
Если бы вы запустили cmd из 32-разрядного процесса, вы бы получили 32-разрядный cmd из-за перенаправления файла (http://msdn.microsoft.com/en-us/library/aa384187.aspx).Получаете ли вы 32-разрядную версию CMD при запуске ее из Проводника?
cmd.exe
запускается из меню "Пуск" на обоих компьютерах.Точное повторение:
- Нажмите на Стартовую сферу
- Тип "
cmd
", появляется только одно совпадение (c:\windows\system32\cmd.exe
) - Запустите его.
На моей рабочей машине он запускает 32-разрядную версию (как продемонстрировал диспетчер задач, она имеет *32
добавляется к имени в Processes
вкладка).На всех других компьютерах Vista 64, которые я пробовал, это запускает 64-разрядную версию cmd
, и я не могу найти рационального объяснения такому поведению.
Я не проверял, есть ли explorer.exe
сам по себе был 32-битным или 64-битным на зараженной машине, возможно, это связано...Спасибо за подсказку.
Вместо того , чтобы %ProgramFiles%
, разве нет %Programfiles(x86)%
это всегда идет туда, куда вы хотите, независимо от того, что именно cmd.exe запущено?Все мои 64-разрядные системы Windows XP имеют это;извините меня за то, что я не нашел времени для загрузки системы Vista.