Почему в Windows Vista по умолчанию используется 64-разрядная версия 32-разрядного cmd.exe? (Конкретная машина) - PullRequest
0 голосов
/ 17 декабря 2008

Ситуация:

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

Ответы [ 4 ]

2 голосов
/ 19 января 2009

Я наконец-то нашел проблему, и, как и ожидалось, она довольно проста: ошибка пользователя. Проводник (который сам по себе является 64-разрядным процессом в 64-разрядной версии Windows Vista) по умолчанию запускает 64-разрядные командные строки. Если вы хотите 32-битный CMD.EXE, вы должны явно указать C:\Windows\SysWoW64\CMD.EXE.

Причина, по которой это сработало в моей системе, заключается в том, что я использую Far Manager для большей части использования в командной строке, который является 32-разрядным (поэтому он запускает 32-разрядные командные запросы). Когда я проверил, я, должно быть, перепутал 32-битное окно для 64-битного (в конце концов, они выглядят одинаково!) И задал глупый вопрос.

Умер в Sente, проблема с %ProgramFiles(x86)% в том, что его нет в 32-битной Windows Vista, потому что это было бы действительно проще.

Ах, нет ничего лучше публичного сообщения, чтобы выставить себя дураком ...:)

2 голосов
/ 17 декабря 2008

Если вы запускаете cmd из 32-битного процесса, вы получите 32-битный cmd из-за перенаправления файлов (http://msdn.microsoft.com/en-us/library/aa384187.aspx).. Получаете ли вы 32-битную версию CMD при запуске из Explorer

1 голос
/ 17 декабря 2008

cmd.exe запускается из меню «Пуск» на обеих машинах. Точное воспроизведение:

  • Нажмите на стартовую сферу
  • Тип "cmd", подходит только одно совпадение (c:\windows\system32\cmd.exe)
  • Запустите его.

На моей рабочей машине он запускает 32-битную версию (как показывает Диспетчер задач, к имени на вкладке Processes добавлено *32). На всех других машинах Vista 64, которые я пробовал, запускается 64-битная версия cmd, и я не могу найти рационального объяснения этому поведению.

Я не проверял, был ли сам explorer.exe 32-битным или 64-битным на зараженной машине, возможно, это связано ... Спасибо за подсказку.

0 голосов
/ 13 января 2009

Вместо %ProgramFiles%, не существует ли %Programfiles(x86)%, который всегда идет туда, куда вы хотите, независимо от того, какой cmd.exe запущен? Все мои 64-битные системы Windows XP имеют это; извините, что я не нашел время для загрузки системы Vista.

...