Perché Windows 7 installa app a 64 bit nella cartella Programmi (x86)? Posso cambiare il comportamento?


12

Sto usando la versione a 64 bit di Windows 7 dal CTP e ho riscontrato alcuni problemi con le applicazioni che vengono installate nella C:\Program Files (x86)cartella. Qual è lo scopo di avere comunque 2 directory di file di programma separate?

Ogni programma che ho installato è andato nella C:\Program Files (x86)cartella. Non sembra importare se l'app è a 32 o 64 bit. Perché le app a 64 bit non vengono inserite C:\Program Files?

C'è un modo per modificare l'impostazione predefinita per essere C:\Program Filesinvece? Avrebbe rovinato qualcosa se avessi messo tutto C:\Program Files?

Se in effetti ci fosse qualche vantaggio nell'avere una cartella separata per le app a 64 bit, sembra che l'impostazione predefinita più sensata sarebbe stata quella di utilizzare C:\Program Filesle app x86 e creare una nuova C:\Program Files (x64)cartella per le nuove app a 64 bit. Ciò contribuirebbe a mantenere la compatibilità con le versioni precedenti. Lavoro come sviluppatore di software e alcuni dei miei progetti contengono riferimenti di percorso a librerie in C:\Program Files. Ora quei riferimenti sono rotti sul computer Windows 7 che li ha inseriti C:\Program Files (x86). Ho anche provato a cambiare la posizione di destinazione nell'installer C:\Program Files, ma questo è stato ignorato e l'app è andata C:\Program Files (x86)comunque.

Questo è molto frustrante perché devo condividere il codice sorgente tra macchine a 32 e 64 bit e non voglio fare confusione con alcuni file di configurazione che impostano il percorso di queste librerie in modo diverso su macchine diverse.

Modifica per quanto riguarda le variabili di ambiente: (. Utilizzando solo difetto valori in inglese di variabili per semplicità) Su una macchina a 64 bit %ProgramFiles%sarà C:\Program Filesmentre la nuova variabile di zecca %ProgramFiles(x86)%sarà C:\Program Files (x86). Quindi, se si dispone di un programma a 32 bit che deve trovare il percorso della cartella in cui sarebbe installato, dovrebbe verificare se era in esecuzione su una versione di Windows a 32 o 64 bit per per sapere quale variabile d'ambiente usare. Qualsiasi app a 32 bit scritta senza questa considerazione dovrebbe essere aggiornata per funzionare correttamente su un computer a 64 bit. Quindi, anche usando le variabili di ambiente, la compatibilità con le versioni precedenti viene interrotta.

Inoltre, %ProgramFiles(x86)%non esiste nelle versioni a 32 bit di Windows. In tal caso, le app a 32 bit potrebbero sempre utilizzare quella variabile di ambiente e non richiederebbero alcuna logica condizionale in base al sistema operativo su cui sono in esecuzione.


6
Sei sicuro che queste app siano davvero a 64 bit? Nella maggior parte dei casi troverai programmi compatibili solo a 64 bit, ma in realtà sono applicazioni a 32 bit.
John T,

Mi chiedo se l'uso della %ProgramFiles%variabile d'ambiente avrebbe risolto questo problema. Non sono sicuro di come gestisca la differenza x86 / 64bit.
Ceejayoz,

Risposte:


7

La ragione di ciò è semplicemente che molti vecchi installatori o non capiscono la nuova struttura dei file e non inseriscono tutto nella directory dei file di programma standard oppure stai guardando un programma intelligente che ha alcuni componenti a 32 bit che vengono copiati lì.

La tua scommessa migliore è scaricare un nuovo programma, come x64 Winrar e vedere solo dove si installa per escludere un problema con il tuo computer.

Per quanto riguarda il disordine: può, ma dipende davvero dal programma, non esiste una risposta adatta a tutti ... alcuni programmi più piccoli e compatti con pochi file non dovrebbero avere problemi, dove, se si parla di Office , Adobe o qualsiasi altra "suite" o programma di grandi dimensioni, molto probabilmente fallirà perché hanno molti componenti condivisi che sono architettura incrociata.


Quindi, perché Microsoft non ha impostato "C: \ Programmi" come posizione per le app a 32 bit in modo che quei vecchi programmi di installazione non causassero problemi. Inoltre, non capisco davvero perché ci debba essere una separazione. Perché non possono semplicemente andare in "C: \ Programmi"?
CoderDennis

Il motivo per cui non è possibile è che alcune applicazioni (in particolare quelle con componenti condivisi) hanno file con lo stesso nome su 32 bit e 64 bit. Per quanto riguarda il motivo per cui è così: non ne ho idea, qualcuno probabilmente aveva un'ottima ragione in quel momento e si è semplicemente bloccato come "la cosa da fare".
William Hilsum,

4

Se usi qualcosa di diverso da %ProgramFiles%(o CSIDL_PROGRAM_FILES, o sotto .NET Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)), sei comunque nei guai, poiché le installazioni personalizzate possono avere programmi installati su altri volumi (D: ad esempio) e le installazioni internazionali spesso hanno altre cartelle per impostazione predefinita.

  • Spagnolo di Windows: C:\Archivos de Programa,
  • Finestre francese: C:\Programmes,
  • Tedesca di Windows: C:\Programme,
  • Windows svedese: C:\Program

eccetera.


Non ho menzionato le variabili di ambiente nella mia domanda originale per renderlo semplice. Ho appena aggiunto una modifica che sottolinea come l'utilizzo %ProgramFiles%sia esattamente ciò che causa il problema.
CoderDennis

3

Si noti che nelle versioni a 64 bit di Windows 7 (questo può applicarsi anche ad altre versioni del sistema operativo più recenti, ma posso confermarlo solo per Win 7 a 64 bit) c'è una differenza tra la posizione corrispondente del% ProgramFiles% in explorer e in DOS.

In Windows 7 l'effettiva posizione della cartella fisica di% ProgramFiles% (e la variabile% ProgramFiles (x86)% ambiemnt associata) è fissata come nella versione inglese ; vale a dire "C: \ Programmi" e "C: \ Programmi (x86)" rispettivamente, ma viene mostrato in exploit localizzato come appropriato.

Per fornire un esempio specifico; su un'installazione svedese di Windows 7 a 64 bit, se apri Explorer e cerchi nell'unità di sistema (in genere C :) vedi le cartelle " Programma " e " Programma (x86) ". Digitando% ProgramFiles% nella barra degli indirizzi si passa a "C: \ Program".

Tuttavia, se si apre una finestra DOS e si digita SET, si vedrà che il valore effettivo di% ProgramFiles% è "C: \ Programmi" e non lo strumento di gestione delle cartelle "C: \ Program". Esplorando ulteriormente con CD e DIR puoi vederlo fisicamente è "C: \ Programmi"

La morale è che se usi l'ambiente variabile o il programma tramite l'API tutto funzionerà ancora, ma fai attenzione a questo sottile cambiamento quando esplori il file system!


Nella versione polacca "Programmi" (x86) "è" Pliki programów (x86) ", mentre" Programmi "è, beh ..." Programmi ". Il polacco ha una grammatica strana. Inoltre, ti preghiamo di non chiamarlo una casella DOS. Non c'è DOS lì.
Kinokijuf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.