Почему 64-разрядная версия Windows Vista использует 32-разрядную версию cmd.exe по умолчанию?(для конкретной машины)

StackOverflow https://stackoverflow.com/questions/373351

Вопрос

Ситуация:

Мне нужно преобразовать нашу текущую среду разработки с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top