2010-04-23 9 views
9

Mam aplikację C#, która tworzy plik ustawień dla siebie do przechowywania bieżącego stanu niektórych elementów wizualnych. Ta aplikacja działa dobrze na każdym komputerze, na którym nie działa system Windows 7, ale na tych komputerach pojawia się błąd, że nie można utworzyć pliku ustawień, ponieważ użytkownik nie ma uprawnień. Teraz mógłbym rozwiązać ten problem, przechodząc na każdy komputer, logując się jako administrator i przyznając użytkownikowi prawo do odczytu i zapisu w folderze programu dla aplikacji, którą zainstalowaliśmy, ale musi być lepszy sposób.Dlaczego moja aplikacja C# nie może tworzyć plików w systemie Windows 7?

Wygląda na to, że w XP masz dostęp do zapisu w folderach utworzonych domyślnie, ale tak nie jest. Czy jest potrzebne ustawienie w pakiecie instalacyjnym, aby to działało?

+0

Czy sprawdziłeś, czy pakiet instalacyjny zaznacza katalog zapisujący ustawienia i przypisuje go do właściwego użytkownika? – AlG

+2

Nie mówisz, gdzie tworzysz pliki, które mogą być przydatne. –

Odpowiedz

19

Chodzi o to, że nie powinieneś przechowywać plików ustawień w folderze programu. Microsoft odradza to od dawna, ale zaczął robić rzeczy bardziej rygorystyczne z Vistą IIRC.

Użyj Environment.SpecialFolders.ApplicationData (itp), aby znaleźć najbardziej odpowiednie miejsce do ustawienia. Lub użyj infrastruktury ustawień .NET, która zrobi to automatycznie za Ciebie.

+2

Dzięki, wiedziałem, że robię coś zasadniczo nie tak. Od lat przechowuję dane w folderze programu, a to po prostu siła przyzwyczajenia. Przełączyłem się do tworzenia własnego folderu w Danych aplikacji i wszystko działało dobrze. –

7

Czy próbujesz utworzyć pliki w folderze instalacyjnym? powinieneś używać folderu danych użytkownika dla danych, a nie folderów instalacyjnych. Użyj folderu Environment.SpecialFolders.ApplicationData, aby uzyskać folder, do którego możesz pisać.

4

Prawdopodobnie działasz jako administrator na komputerze z systemem innym niż Windows 7, który możesz nigdzie pisać. Pamiętaj, aby zapisać dane każdego użytkownika w jego folderze AppData (roaming, jeśli powinien on być zgodny z komputera na komputerze lub lokalny, jeśli jest to pamięć podręczna lub tylko lokalna na maszynę Taht). Jeśli chcesz udostępnić ustawienia między użytkownikami, użyj folderu C: \ ProgramData z odpowiednimi uprawnieniami.

Program nie powinien próbować przechowywać ustawień w swoim katalogu instalacyjnym.

Pamiętaj, aby użyć SpecialFolders wraz z Environment.GetFolderPath, aby uzyskać potrzebne właściwe lokalizacje. Nigdy nie powinieneś używać trudnych ścieżek kodu, ponieważ mogą one różnić się w zależności od wersji I języków. (Wiem, że w niemieckiej wersji XP nie było Program Files ale Programme!)

2

Jest to błąd bezpieczeństwa w programie, ponieważ program zapisuje informacje do katalogu programu (co jest i powinno być chronione. Jeśli zajdzie potrzeba naprawienia przyczyny źródłowej, rozważ użycie SpecialFolder enumeration lub statycznych elementów na Application, takich jak CommonAppDataPath, aby zapisać informacje w bardziej odpowiedniej lokalizacji.

Przyjmując typowe podejście do pisania pliku za pomocą ścieżki, jest to prosta przyczyna i nie istnieje dobry powód, by nie korygować głównej przyczyny. Jeśli nie masz pewności, jak manipulować ścieżką, rozważ użycie opcji Path.Combine(). Robi to za ciebie.

2

Ogólnie nie powinieneś zapisywać danych programu w żadnym folderze znajdującym się pod plikami programów (nawet jeśli utworzyłeś folder). Należy użyć numeru Environment.GetFolderPath(...), aby dowiedzieć się, gdzie umieścić dane aplikacji. można przekazać w jednym z wielu teksty stałe zdefiniowane here - prawdopodobnie chcesz Environtment.SpecialFolder.CommonApplicationData

3

ta aplikacja działa dobrze na każdym komputerze, który nie jest uruchomiony system Windows 7

Źle! Działa tylko na tych komputerach , jeśli używasz jako administrator.Wydaje mi się, że program jest uszkodzony w systemie Windows XP, jeśli spróbujesz go uruchomić na prawie każdym komputerze firmowym, a nie na komputerze domowym.

Zamiast tego tego rodzaju informacje muszą znajdować się w jednym ze specjalnych folderów danych aplikacji.

2
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
-1

Nie widzę, jak to wszystko jest odpowiedzią aktu. Muszę umieć napisać raport i zapisać go w folderze dokumentów użytkowników w tym samym folderze, w którym czytałem pliki xml, z których piszę raport.

+0

Więc napisałeś * odpowiedź * tylko, żeby to powiedzieć? Użyj komentarzy lub zadaj nowe pytanie (tak, nadal nie możesz uzyskać dostępu do komentarzy, musisz najpierw podać prawdziwe odpowiedzi lub zadać dobre pytania, aby zdobyć przedstawiciela) – Leeor

Powiązane problemy