2012-04-03 12 views
5

Pracuję więc nad prostym programem .NET do pracy i trafiam na trochę dziwną blokadę, którą mogę ". t wymyślić. Aplikacja korzysta z pliku konfiguracyjnego, który dodaje aplikacje do rozwijanego menu. Jednak przed dodaniem do menu robi plik system.io.file.exists, aby sprawdzić, czy plik istnieje, przynajmniej w momencie utworzenia menu.System.IO.File.Exists (@ "C: Windows System32 SnippingTool.exe") zwraca fałsz

Jednak System.IO.File.Exists (@ "C: \ Windows \ System32 \ SnippingTool.exe") zwraca wartość false, ale plik wykonywalny istnieje. Podobnie stikynot.exe zwraca także wartość false. Inne pliki w katalogu system32 zwracają wartość true (np. Notatnik). Mogę zgłosić te aplikacje, ale mój program .net nie może ich odczytać, a system.io.file.exists zwraca wartość false. Sprawdziłem różne uprawnienia bez powodzenia. Wydaje się być izolowany do kilku aplikacji, ale nie jestem pewien dlaczego.

+0

robi uwagę, że program jest uruchomiony pod masz uprawnień do przeglądania tej lokalizacji? Jeśli nie, otrzymasz fałszywe w tym wezwaniu. – Oded

+0

Tak, i może znaleźć inne aplikacje w tym katalogu. – Morcalavin

+0

możliwy duplikat [C# Sprawdź, czy plik wykonywalny istnieje w ścieżce systemu Windows] (http://stackoverflow.com/questions/3855956/c-sharp-check-if-an-executable-exists-in--windows-path) – Arion

Odpowiedz

9

Jest to funkcja 64-bitowego systemu Windows.

W x64 masz dwa foldery z plikami systemowymi: system32 i syswow64.

Jeśli umieścisz coś w system32, to będzie postrzegane przez wszystkich 64 bitowych zastosowań. SysWOW64 jest ze względu na kompatybilność - wszystko tam umieszczone będzie widoczne przez 32-bitowe aplikacje (sic!).

Jeśli chodzi o .NET, plik nie istnieje. Działa dla notatnika, ponieważ notepad.exe jest obecny w obu tych katalogach.

Możesz przetestować to zachowanie. Utwórz plik tekstowy w jednym z katalogów, ale nie drugi i sprawdź jego istnienie. Następnie zmień konfigurację projektu (kliknij prawym przyciskiem myszy na rozwiązanie -> Menedżer konfiguracji) między x86 i x64 i ciesz się wynikiem.

+0

To wszystko. Dzięki Ci. – Morcalavin

2

Mam szalony błąd związany z tym tematem. Dziękuję ya23.

w moim przypadku, tylko zmiana właściwości projektu> Budowa> odznacz Wolę 32-bitowy

Powiązane problemy