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