2012-09-04 27 views
5

Mam następujący problem podczas próby użycia niestandardowej sekcji konfiguracji w pliku app.config. Używam sekcję zwyczaj config śledzić wybór folderów, które chcę wykonać kopię zapasową z mojego programu tak:Zapisywanie niestandardowej sekcji konfiguracji skutkuje System.UnauthorizedAccessException

<CustomConfigSection> 
    <BackupLocations> 
     <clear /> 
     <add path="C:\Users\Marcel\Documents\" /> 
    </BackupLocations> 
</CustomConfigSection> 

Teraz, kiedy tylko zapisać plik konfiguracyjny otrzymuję ten wyjątek:

System.Configuration.ConfigurationErrorsException: Wystąpił błąd Ładowanie pliku konfiguracyjnego: Dostęp do ścieżki C: \ Program Files (x86) \ Rozwiązania kopii zapasowych \ uqhuxi1j.tmp są zabronione. (C: Program Files \ (x86) \ Backup Solutions \ BS.exe.Config) ---> System.UnauthorizedAccessException

Kod używam jest:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
CustomConfigSection section = (CustomConfigSection)config.GetSection("CustomConfigSection"); 

section.BackupLocations.Add(element); 

section.SectionInformation.ForceSave = true; 
config.Save(ConfigurationSaveMode.Full); 

to działa grzywna po zalogowaniu się jako administrator i występuje tylko wtedy, gdy na komputerze jest skonfigurowanych wiele kont, więc oznacza to, że jest to problem z UAC/uprawnienia. Jako zwykły użytkownik nie mam odpowiednich uprawnień do zapisu dla tego folderu.

teraz na moje pytanie (-ów):

Jak to możliwe ustawienia użytkownika zostaną zapisane do AppData i sekcji config niestandardowej próbuje zapisać w ApplicationFolder/exe.config? W jaki sposób mogę zapisać sekcję niestandardową również w pliku konfiguracyjnym AppData?

Potrzebuję być w stanie zapisać moje dane dla każdego użytkownika, niezależnie od uprawnień. Czy mogę to osiągnąć za pomocą niestandardowej sekcji konfiguracji lub czy potrzebuję innego podejścia? Najlepiej chciałbym zapisać moją sekcję niestandardową również w pliku konfiguracyjnym AppData. Nie chcę używać sztuczek w moim Instalatorze, aby dostosować uprawnienia do mojego folderu aplikacji, aby umożliwić mu pisanie. Przede wszystkim nie chcę wymagać uprawnień administratora podczas uruchamiania mojego programu!

Dzięki za odpowiedzi, bardzo docenione.

Odpowiedz

0

Po dobrze przespanej nocy zdałem się już natknąć na odpowiedź.

Konfiguracja jest zapisywana w katalogu AppData dla danych dotyczących wersji i użytkownika. To, co robiłem, polegało na bezpośrednim otwarciu pliku exe.config i nie wykonywaniu żadnych czynności związanych z ustawieniami o zasięgu użytkownika, nie mówiąc już o zapisywaniu do pliku konfiguracyjnego AppData dla bieżącej wersji mojego programu. Kiedy zdałem sobie z tego sprawę, wiedziałem, czego szukać w Google.

Znalazłem te artykuły:

Windows Forms - Creating and Persisting Custom User Settings in C#

Windows Forms - Creating and Persisting Custom User Settings in C# - Part 2

Eksperymentowanie i pobieranie plików źródłowych tego projektu pomogli mi dużo i dostarczyła mi dokładnie to, czego potrzebuję. Tak więc wprowadzałem niewłaściwe funkcje do tego, co chciałem zrobić.

Dziękuję czytelnikom i podziękowania dla pana Ritchiego za wysłanie mnie w dobrym kierunku.

0

Ustawienia z zakresu użytkownika są zapisywane w AppData, ponieważ użytkownicy mają uprawnienia do zapisu w tym miejscu. Użytkownicy nie mają uprawnień do zapisu w Program Files. Użyj ustawień o zasięgu użytkownika, aby zapisać je w AppData. Aby uzyskać więcej informacji, patrz http://msdn.microsoft.com/en-us/library/a65txexh(v=vs.100).aspx.

Powiązane problemy