2011-10-02 12 views
6

Chcę sprawdzić, czy istnieje dll w katalogu System32 (Windows 7). Ale nawet jeśli istnieje, FileExists() zwraca false. LoadLibrary zwraca poprawny uchwyt. W tym przypadku chcę tylko sprawdzić, czy pliki istnieją i wizualizować te informacje. Czy masz jakieś wskazówki, aby rozwiązać ten problem?FileExists() zwraca fałsz, nawet jeśli plik istnieje

+0

Zgaduję, że problem "uprawnień". Vista/Windows 7 jest bardzo ochronny, jeśli chodzi o pozwalanie ludziom na błądzenie w \ windowsach :) – paulsm4

+0

@ paulsm4: Nie, to nie może być to. System Windows zawsze pozwoli ci dowiedzieć się, czy plik istnieje, czy nie. –

Odpowiedz

21

Najprawdopodobniej jest to spowodowane przekierowaniem pliku. Masz maszynę 64-bitową, ale z 32 procesu Delphi, Windows\system32 faktycznie przekierowuje do Windows\Syswow64. Tak więc, gdy myślisz, że pytasz o istnienie pliku w Windows\system32, system faktycznie zgłasza istnienie (lub nie) pliku w Windows\Syswow64.

Jeśli naprawdę potrzebujesz zobaczyć prawdziwy system 64-bitowy32, musisz wyłączyć przekierowanie pliku. Możesz to zrobić za pomocą funkcji Wow64DisableWow64FsRedirection(). Nie zapomnij go ponownie włączyć za pomocą Wow64RevertWow64FsRedirection(). Uważaj, że wyłączenie przekierowania ma szeroki zakres efektów i może powodować bardzo dziwne zachowanie, więc należy zachować ostrożność.

+0

To bardziej przypomina to. (No cóż, to i jakaś głupia literówka, oczywiście ...) –

+0

Teraz, kiedy o tym myślę, mam 99% to jest problem. +1, zdecydowanie. –

+0

Tak, prawdopodobnie tak jest, w przeszłości miałem coś podobnego, dziwne było to, że mój całkowity dowódca pokazał mi również przekierowany folder, po tym, jak ktoś powiedział mi, że to dlatego, że jest 32-bitowy, wszystko było jasne. (Nadal możesz wyłączyć przekierowanie tam). W każdym razie wystarczy sprawdzić stronę TC, teraz jest 64-bitowa wersja beta. – balazs

10

Niezbyt wiele informacji do wykonania, kod, którego używasz może pomóc, ale czy może to być problem 64-bitowy i że dll jest rzeczywiście w folderze SysWOW64? Zobacz here dla dobrego opisu, jak to działa.

+1

I oczywiście +1 również. –

2

Prawie na pewno nie określasz pełnej lub poprawnej ścieżki względnej pliku w swoim zgłoszeniu FileExists. LoadLibrary przeszuka określone lokalizacje (te, w których powinny znajdować się biblioteki dll), ale FileExists nie będzie. Podaj pełną i poprawną ścieżkę, a FileExists będzie działać poprawnie.

Powiązane problemy