2009-11-06 26 views
12

Jakie są ich zastosowania, jeśli i tak nie można ich zmienić z wartości domyślnych? Pytanie retoryczne.Jak obejść ustawienia zakresu aplikacji, które są tylko do odczytu?

Po pierwsze, co jest najlepszym sposobem na ominięcie ustawień systemu i zapisywać do pliku ustawień aplikacji (zakres bezpośrednio kwestii bezpieczeństwa w następnym paragrafie)? XmlReader/XmlWriter?

IIRC, jeśli aplikacja próbuje napisać do folderu Program Files, Windows Vista i 7 robi jakąś magię temu zapobiec. Przypuszczam, że muszę zadzwonić do UAC, aby podnieść i muszę umieścić tę ozdobną ikonę tarczy na przycisku OK w oknie Opcje mojej aplikacji i tak dalej. Link do szybkiego poradnika?

Alternatywnie, można powiedzieć, że to, co próbuję zrobić, to głupie i należy przechowywać moje ustawienia, zakres dowolnie zmieniana aplikacji zupełnie gdzieś indziej.

Odpowiedz

10

Po zmianie ustawień na "użytkownik" można je zmienić w kodzie, a po wywołaniu funkcji Zapisz() zostaną one zapisane w pliku user.config w folderze bieżących ustawień lokalnych użytkownika.

Oczywiście, to znaczy mogą być różne dla każdego użytkownika. Zasadniczo globalne ustawienia aplikacji, które są takie same dla każdego użytkownika, nie są modyfikowane w kodzie, ponieważ zmiana wprowadzona przez jednego użytkownika będzie dotyczyć wszystkich innych osób (stąd ustawienia aplikacji są tylko do odczytu).

Jeśli nie chcesz, aby były dostępne dla użytkowników, spójrz na klasę ConfigurationManager. Umożliwi to ręczne odczytywanie i zapisywanie plików .config. Pamiętaj jednak, że folder c: \ program files \ jest chroniony, a normalni użytkownicy nie mają do niego dostępu (spowoduje to wyświetlenie monitów UAC lub niepowodzenie w vista/win7). Zastanów się uważnie, jak sobie z tym poradzisz i pamiętaj, że każda zmiana w pliku app.config wpłynie na wszystkich użytkowników.

Nie ma położenie w oknach, że wszyscy użytkownicy są gwarantowane, aby mieć dostęp do zapisu.

+2

Ale tego właśnie chcę! Użytkownik A modyfikuje coś, a Użytkownik B nie musi powtarzać tej modyfikacji. – CannibalSmith

+9

To dziwne, że więcej osób nie potrzebuje tej funkcji. Z pewnością wiele aplikacji ma globalne ustawienia, które programista chce stworzyć dla przyjaznego interfejsu użytkownika. –

+1

@Ben - Możesz użyć klasy [ConfigurationManager] (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx), jeśli naprawdę chcesz zapisać ustawienia bezpośrednio do globalnej. plik exe.config.Oczywiście, jeśli ten plik znajduje się w c: \ programfiles \ twój użytkownik będzie potrzebował odpowiednich uprawnień administratora. Najpierw otwórz konfigurację w następujący sposób: var config = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.None); następnie dodaj nowe ustawienie w następujący sposób: config.AppSettings.Settings.Add ("key", "value"); (Możesz też utworzyć niestandardowe sekcje konfiguracji) Nie zapomnij zadzwonić zapisać. –

0

Spójrz tutaj: Best practice to save application settings in a Windows Forms Application

Klasa ApplicationSettings nie oszczędność wsparcia ustawienia w pliku app.config . Jest to bardzo ważne dzięki projektowi , aplikacje działające z prawidłowo zabezpieczonym kontem użytkownika (pomyśl Vista UAC) nie mają uprawnień do zapisu do folderu instalacyjnego programu .

Możesz walczyć z systemu klasy ConfigurationManager. Jednak najłatwiejszym rozwiązaniem jest przejście do projektanta ustawień i zmiana zakresu ustawienia na Użytkownik. Jeśli ten powoduje trudności (powiedzmy, ustawienie to istotne dla każdego użytkownika), powinieneś umieścić swoją funkcję Opcje w oddzielnym programie , aby móc poprosić o monit o podniesienie uprawnień do . Lub przestańmy przy użyciu ustawienia.

Powiązane problemy