Domanda

La situazione:

Ho bisogno di convertire il nostro ambiente di sviluppo in corso da Windows XP a 32 bit a Windows Vista 64-bit (*). Naturalmente, ho incontrato un sacco di posti nel nostro sistema di generazione in cui i percorsi hardcoded erano problematici (ad esempio "C:\Program Files" divenire "C:\Program Files (x86)"). Fortunatamente, c'è una variabile di ambiente %ProgramFiles% che associa alla directory appropriata in base al processo di origine (32-bit o 64-bit). Così ho aggiornato i script di build con %ProgramFiles%, ed ero sicuro che sarebbe la fine di questo.

L'ambiente di sviluppo è chiamato dalla riga di comando (C:\Windows\System32\cmd.exe).

Il problema: Su una macchina specifica (vale a dire la mia macchina dev sul posto di lavoro), si scopre che C:\Windows\System32\cmd.exe è in realtà un processo a 32 bit, quindi gli script trovare la versione x86 della directory Program Files e tutto funziona alla grande.

Su ogni altra macchina a 64 bit è possibile trovare (compresa la mia macchina a casa), C:\Windows\System32\cmd.exe è la versione a 64 bit, e la versione a 32 bit è in C:\Windows\SysWow64\cmd.exe. Così i script di build non riesce a trovare nulla che stanno cercando e non riescono.

Capisco ora che la cmd.exe a 32 bit dovrebbe essere chiamato in modo esplicito, se questo è quello che vi serve, e per impostazione predefinita si ottiene un cmd.exe 64bit. tipico caso di WORKSFORME ...

La domanda è: , che cosa è successo alla macchina in cui questo non è vero? Perché ricevo un 32bit cmd.exe di default su una macchina, ma non su altri? In tutti i casi che sto esplicitamente eseguendo la C:\Windows\System32\cmd.exe dal menu Start|Run ma ottenere risultati diversi solo su una macchina . Tutti sono in esecuzione la stessa edizione di Vista a 64 bit.

Ogni pensiero o intuizione?

(*) Si prega di accettare che I deve fare questo. Io non sono libero di dire perché che sto facendo questo. Re-installazione del sistema operativo e tutto da zero probabilmente funzionerà, ma è sicuramente eccessivo. Inoltre, era abbastanza difficile convincere il nostro reparto IT di distribuire macchine Vista!

È stato utile?

Soluzione 2

ho finalmente trovato il problema, e come previsto è abbastanza semplice: un errore dell'utente. Explorer (che è essa stessa un processo a 64 bit su Windows Vista 64-bit) lancia il prompt dei comandi a 64 bit per impostazione predefinita. Se si desidera una a 32 bit CMD.EXE, è necessario fare riferimento in modo esplicito C:\Windows\SysWoW64\CMD.EXE.

Il motivo per questo ha funzionato bene sul mio sistema è che io uso Far Manager per la maggior parte del mio utilizzo della riga di comando, che è a 32 bit (quindi lancia i prompt dei comandi a 32 bit). Quando ho verificato devo aver confuso una finestra a 32 bit per una finestra a 64 bit (dopo tutto quello che hanno lo stesso aspetto!) E ha chiesto una domanda stupida.

Die in Sente, il problema con %ProgramFiles(x86)% è che non esiste su Windows Vista a 32 bit, perché sarebbe davvero stato così semplice.

Ah, non c'è niente come un post pubblico per fare un pazzo di te ...:)

Altri suggerimenti

se è stato eseguito Cmd da un processo a 32 bit, si otterrebbe il cmd a 32 bit a causa di reindirizzamento del file ( http://msdn.microsoft.com/en-us/library/aa384187.aspx ). Non si ottiene la versione a 32 bit di CMD quando lo si esegue da Explorer?

cmd.exe viene lanciato dall'interno del menu Start su entrambe le macchine. Repro esatta:

  • Fare clic su Start Orb
  • Tipo "cmd", solo una partita viene in su (c:\windows\system32\cmd.exe)
  • lanciarlo.

Sulla mia macchina di lavoro, si lancia la versione a 32 bit (come dimostrato dal Task Manager, si è *32 aggiunto al nome nella scheda Processes). Su tutte le altre Vista 64 macchine che ho provato, questo lancia la versione a 64 bit di cmd, e non riesco a trovare una spiegazione razionale per questo comportamento.

Non ho controllato se explorer.exe stesso era 32bit o 64bit sulla macchina colpita, forse questo è legato ... Grazie per il suggerimento.

Invece di %ProgramFiles%, non c'è un %Programfiles(x86)% che va sempre dove si vuole, indipendentemente da quale cmd.exe è in esecuzione? I miei sistemi a 64 bit di Windows XP che hanno tutti; mi scusi per non aver trovato il tempo per l'avvio di un sistema Vista.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top