Voglio verificare se esiste una dll nella directory System32 (Windows 7). Ma anche se esiste, FileExists() restituisce false. LoadLibrary restituisce un handle valido. In questo caso, voglio solo controllare, se i file esistono e visualizzare queste informazioni. Hai qualche consiglio per risolvere questo?FileExists() restituisce false, anche se il file esiste
risposta
Molto probabilmente si tratta di reindirizzamento del file. Si dispone di una macchina a 64 bit, ma dal processo 32 Delphi, Windows\system32
in realtà reindirizza a Windows\Syswow64
. Quindi, quando pensi di chiedere l'esistenza di un file in Windows\system32
, il sistema sta effettivamente segnalando l'esistenza (o meno) di un file in Windows\Syswow64
.
Se è davvero necessario vedere nel vero sistema a 64 bit32, è necessario disabilitare il reindirizzamento dei file. Puoi farlo con la funzione Wow64DisableWow64FsRedirection()
. Non dimenticare di riaccenderlo con Wow64RevertWow64FsRedirection()
. Fai attenzione che disabilitare il redirector ha effetti di ampia portata e può portare a comportamenti molto strani, quindi fallo con cura.
Questo è più simile. (Bene, questo e qualche errore di battitura, ovviamente ...) –
Ora che ci penso, sono al 99% questo è il problema. +1, sicuramente. –
Sì, probabilmente questo è il caso, in passato avevo qualcosa di simile, lo strano era che il mio comandante totale mi mostrava anche la cartella reindirizzata, dopo che qualcuno mi ha detto che è a 32 bit tutto era chiaro. (Puoi comunque disabilitare il reindirizzamento Là). Comunque ho appena controllato il sito TC, ora c'è una beta a 64 bit. – balazs
Non ci sono molte informazioni da seguire, il codice che si sta utilizzando potrebbe essere d'aiuto, ma potrebbe trattarsi di un problema a 64 bit e la dll si trova effettivamente nella cartella SysWOW64? Vedi here per una buona descrizione di come funziona.
E un +1 anche qui, ovviamente. –
Quasi certamente non si specifica il percorso relativo completo o valido del file nella chiamata FileExists
. LoadLibrary
cercherà alcune posizioni (quelle in cui ci si aspetta che le DLL risiedano) per te, ma non lo sarà lo FileExists
. Fornire il percorso completo e corretto e FileExists
funzionerà correttamente.
Sto indovinando il problema dei "permessi". Vista/Windows 7 è molto protettivo nel permettere alle persone di andare in giro in \ windows :) – paulsm4
@ paulsm4: No, non può essere quello. Windows ti consente sempre di scoprire se un file esiste o meno. –