Pergunta

A situação:

Eu preciso converter nosso ambiente de desenvolvimento atual do Windows XP de 32 bits para Windows Vista 64-bit (*). Naturalmente, eu correr em muitos lugares no nosso sistema de construção onde os caminhos codificados eram problemática (por exemplo, "C:\Program Files" tornar-se "C:\Program Files (x86)"). Felizmente, há uma variável de ambiente %ProgramFiles% que mapeia para o diretório apropriado com base no processo fonte (32-bit ou 64-bit). Então eu atualizei os scripts de construção com %ProgramFiles%, e eu tinha certeza que seria o fim de tudo.

O ambiente de compilação é chamado a partir da linha de comando (C:\Windows\System32\cmd.exe).

O problema: Em uma máquina específica (ou seja, a minha máquina dev no trabalho), verifica-se que C:\Windows\System32\cmd.exe é realmente um processo de 32 bits, então os scripts encontrar a versão x86 do diretório Program Files e tudo funciona muito bem.

Em todos os outros máquina de 64 bits posso encontrar (incluindo minha máquina de casa), C:\Windows\System32\cmd.exe é a versão de 64 bits, ea versão de 32 bits está em C:\Windows\SysWow64\cmd.exe. Assim, a construção de scripts não pode encontrar qualquer coisa que eles estão procurando e falhar.

Eu entendo agora que o cmd.exe 32 bits deve ser chamado explicitamente se é isso que você precisa e, por padrão você começa um cmd.exe de 64 bits. caso típico de WORKSFORME ...

A questão é , o que aconteceu com a máquina em que isso não é verdade? Por que estou recebendo um cmd.exe 32 bits por padrão em uma máquina, mas não em outros? Em todos os casos, eu estou executando explicitamente C:\Windows\System32\cmd.exe a partir do menu Start|Run mas conseguir resultados diferentes em uma máquina única . Todos estão executando a mesma edição do Vista de 64 bits.

Todos os pensamentos ou insight?

(*) Por favor, aceite que eu deve fazer isso. Não tenho a liberdade de dizer por eu estou fazendo isso. Re-instalar o sistema operacional e tudo a partir do zero, provavelmente, o trabalho, mas é certamente um exagero. Além disso, era bastante difícil convencer o nosso departamento de TI para dar máquinas com Vista!

Foi útil?

Solução 2

Eu finalmente encontrei o problema, e como esperado, é bastante simples: erro do usuário. Explorer (que em si é um processo de 64 bits no Windows Vista 64-bit) lançamentos de prompts de comando de 64 bits por padrão. Se você quer uma CMD.EXE de 32 bits, você deve explicitamente C:\Windows\SysWoW64\CMD.EXE referência.

A razão isso funcionou bem no meu sistema é que eu uso Far Manager para a maioria de meu uso de linha de comando, que é de 32 bits (portanto, lança prompts de comando de 32 bits). Quando eu verificada Devo ter confundido uma janela de 32 bits para uma janela de 64 bits (depois que todos eles têm a mesma aparência!) E fez uma pergunta estúpida.

Matar Sente, o problema com %ProgramFiles(x86)% é que não existe no Windows Vista de 32 bits, porque isso teria sido realmente simples.

Ah, não há nada como uma postagem pública para fazer um tolo de si mesmo ...:)

Outras dicas

Se você executou cmd a partir de um processo de 32 bits, você terá o cmd 32 bits por causa do redirecionamento de arquivo ( http://msdn.microsoft.com/en-us/library/aa384187.aspx ). Você recebe a versão do CMD de 32 bits quando você executá-lo a partir do Explorer?

cmd.exe é lançado de dentro do menu Iniciar em ambas as máquinas. Exact repro:

  • Clique em Iniciar Orb
  • Digite "cmd", apenas um jogo surge (c:\windows\system32\cmd.exe)
  • Execute-o.

Na minha máquina de trabalho, ele lança a versão de 32 bits (como demonstrado pelo Gerenciador de tarefas, tem *32 anexado ao nome no separador Processes). Em todos os outros Vista 64 máquinas que eu tentei, este lança a versão de 64 bits do cmd, e eu não consigo encontrar uma explicação racional para esse comportamento.

Eu não tenho verificado se a própria explorer.exe era 32 ou 64 bits na máquina afetada, talvez isso está relacionado ... Obrigado pela dica.

Em vez de %ProgramFiles%, não há uma %Programfiles(x86)% que sempre vai onde quiser, independentemente de qual cmd.exe está funcionando? Meus sistemas de 64 bits do Windows XP, todos têm que; desculpe-me por não tomar o tempo para arrancar um sistema Vista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top