Domanda

Vorrei sapere quando è necessario inserire un file sotto

C:\Windows\System32 o C:\Windows\SysWOW64 su un 64-bit di sistema di windows.

Ho avuto due DLL, uno per la versione a 32-bit, uno per la versione a 64-bit.

Logicamente, ho pensato di posizionare la DLL a 32 bit sotto C:\Windows\System32 e la versione a 64-bit DLL sotto C:\Windows\SysWOW64.

Con mia grande sorpresa, è l'altro senso intorno!Il 32bit si va in C:\Windows\SysWOW64, e il 64-bit DLL va in C:\Windows\System32.

Molto confusa roba.Qual è la ragione dietro a questo?

È stato utile?

Soluzione

Credo che l'intento era di rinominare System32, ma così tante applicazioni hard-coded per questa strada, che non era possibile rimuoverlo.

SysWoW64 non era destinato per le DLL di sistemi a 64 bit, in realtà è qualcosa di simile a "Windows on Windows64", che significa i bit necessari per eseguire applicazioni a 32 bit su un Windows a 64 bit.

Questo articolo spiega un po ':

"Windows x64 ha una directory System32 che contiene le DLL a 64 bit processi Così nativi con un numero di bit di 64 find (sic!).‘Loro’DLL dove li aspettano:. Nella cartella System32 Un secondo elenco, SysWOW64, contiene le DLL a 32 bit. il redirector file system fa la magia di nascondere la directory reale System32 per i processi a 32 bit e mostrando SysWOW64 sotto il nome di System32 ".

Edit: Se si sta parlando di un programma di installazione, è davvero non dovrebbe hard-code il percorso della cartella di sistema. Invece, lasciate Finestre prendersi cura di esso per voi in base a se il vostro installatore è in esecuzione sul layer di emulazione.

Altri suggerimenti

Devo aggiungere:Non si dovrebbe mettere la dll in \system32\ in ogni caso!Modificare il codice, modificare il vostro programma di installazione...trovare una casa per le punte che NON è ovunque sotto c:\windows\

Per esempio, il vostro installatore mette le dll in:

\program files\<your app dir>\

or

\program files\common files\<your app name>\

(Nota: Il modo per fare questo è quello di utilizzare l'ambiente var:%ProgramFiles% o %ProgramFiles(x86)% per trovare dove i File di Programma è....non è scontato che è c:\program files\ ....)

e poi imposta di registro tag :

HKLM\software\<your app name>
-- dllLocation

Il codice che utilizza la dll legge il registro di sistema, quindi in modo dinamico collegamenti per le dll in quella posizione.

Quanto sopra è il modo intelligente per andare.

Non è mai installare le dll, o di terze parti dll in \system32\ o \syswow64.Se si dispone di statica di carico, si è messo le dll nella tua exe dir (dove saranno trovati).Se non è possibile prevedere l'exe dir (ad es.alcuni altri file exe è chiamare dll), devi mettere la dll dir nel percorso di ricerca (evitare questo, se poss!)

system32 e syswow64 sono per Windows, file... non per chiunque elses file.L'unico motivo che la gente ha la brutta abitudine di mettere le cose non è perché è sempre alla ricerca percorso, e molte apps/moduli di utilizzare il collegamento statico.(Quindi, se si ha realmente arriva al dunque, il vero peccato è il collegamento statico -- questo è un peccato in codice nativo e managed code-sempre sempre sempre in modo dinamico link!)

incontrato lo stesso problema e studiato questo per qualche minuto.

Mi è stato insegnato ad usare Windows 3.1 e DOS, ricordare quei giorni? Poco dopo ho lavorato con i computer Macintosh strettamente per qualche tempo, poi ha cominciato a oscillare di nuovo a Windows dopo l'acquisto di una macchina a 64-bit.

Ci sono motivi reali dietro questi cambiamenti (alcuni direbbero significato storico), che sono necessari per i programmatori di continuare il loro lavoro.

La maggior parte dei cambiamenti sono menzionati sopra:

  • Program Files vs Program Files (x86)

    In principio i file 16 / 86bit sono stati scritti su, '86' processori Intel.

  • System32 significa veramente System64 (su Windows a 64 bit)

    Quando gli sviluppatori hanno iniziato a lavorare con Windows7, ci sono stati diversi problemi di compatibilità in cui altre applicazioni in cui memorizzate.

  • SysWOW64 significa veramente SysWOW32

    In sostanza, in parole povere, significa 'Windows on Windows all'interno di una macchina a 64 bit' . Ogni cartella indica in cui le DLL si trovano per le applicazioni che hanno voglia di usarli.

Qui ci sono due link con tutte le informazioni di base necessarie:

Spero che questo cancella le cose!

System32 è in cui Windows storicamente collocato tutte le DLL a 32 bit, e il sistema è stato per le DLL a 16 bit. Quando Microsoft ha creato il sistema operativo a 64 bit, tutti quelli che conosco di aspettava che i file di risiedere sotto System64, ma Microsoft ha deciso che aveva più senso mettere i file a 64 bit sotto System32. L'unica ragione che ho potuto trovare, è che volevano tutto ciò che era a 32 bit di lavorare in un 64 bit di Windows w / o dover cambiare nulla nei programmi - basta ricompilare, ed è fatta. Il modo in cui hanno risolto questo, in modo che le applicazioni a 32 bit potrebbe ancora correre, era quello di creare un sottosistema di Windows a 32 bit chiamato Windows32 Windows64 On. Come tale, l'acronimo SysWOW64 è stato creato per la directory di sistema del sottosistema a 32 bit. Lo Sys è l'abbreviazione di Sistema e WOW64 è l'abbreviazione di Windows32OnWindows64.
Dal momento che le finestre 16 è già separati da Windows 32, non c'era bisogno per un Windows 16 In Windows 64 equivalenza. All'interno del sottosistema a 32 bit, quando un programma va a utilizzare i file dalla directory system32, in realtà ottenere i file dalla directory SysWOW64. Ma il processo è viziata.

È un disegno orribile. E nella mia esperienza, ho dovuto fare molte più modifiche per la scrittura di applicazioni a 64 bit, che semplicemente cambiando la directory System32 di leggere System64 sarebbe stato un piccolo cambiamento, e uno che le direttive di pre-compilatore sono destinate a gestire.

altre persone hanno già fatto un buon lavoro di spiegare questo enigma ridiculus ... e penso che Chris Hoffman ha fatto un lavoro ancora migliore qui: https://www.howtogeek.com/326509/whats-the-difference-between-the- system32-e-syswow64-cartelle-in-windows /

I miei due pensieri:

  1. Tutti facciamo degli errori stupidi miopi nella vita. Quando Microsoft chiamato la loro (al momento) directory DLL Win32 "System32", aveva senso al momento ... solo che non ha preso in considerazione ciò che accadrebbe se / quando un (a 128 bit o) versione a 64 bit del loro sistema operativo Got sviluppata in seguito - e la massiccia problema di compatibilità a ritroso tale nome di directory causerebbe. Senno di poi è sempre 20-20, quindi non posso biasimarli (troppo) per un simile errore. ... TUTTAVIA ... Quando Microsoft ha poi sviluppare il proprio sistema operativo a 64 bit, anche con il senno di poi, perché oh perché dovrebbero fare non solo l'esatto stesso errore miope di nuovo, ma renderlo ancora peggio da volutamente dando è un nome così fuorviante?!? Che si vergognino!!! Perché non ALMENO in realtà il nome della directory "SysWin32OnWin64" per evitare confusione?!? E cosa succede quando alla fine producono un sistema operativo a 128 bit ... allora dove stanno andando a mettere il loro 32-bit, 64-bit, e 128-bit DLL?!?

  2. Tutto ciò logica sembra ancora del tutto sbagliata per me. Nelle versioni a 32 bit di Windows, System32 contiene DLL a 32 bit; nelle versioni a 64 bit di Windows, System32 contiene le DLL a 64 bit ... in modo che gli sviluppatori non avrebbero dovuto fare modifiche al codice, giusto? Il problema con questa logica è che gli sviluppatori sono sia ora facendo le applicazioni a 64 bit che necessitano di DLL a 64 bit o che stanno facendo le applicazioni a 32-bit che necessitano di DLL a 32 bit ... in entrambi i casi, non sono ancora avvitati? Voglio dire, se stanno ancora facendo un 32 bit app, perché ad oggi eseguito su un 64-bit di Windows, faranno ora bisogno di fare un cambiamento di codice per trovare / riferimento allo stesso ol' DLL a 32 bit che usato prima (ora si trova nella SysWOW64). Oppure, se stanno lavorando su un 64-bit app, che stanno andando ad avere bisogno di ri-scrivere il loro vecchio app per il nuovo sistema operativo in ogni caso ... quindi una ricompilazione / ricostruzione sarebbe stato necessario comunque !!!

Microsoft solo a me fa male a volte.

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