Sposób zapisu ustawień w katalogu systemowym

0

Witam,
Mam pytanie związane z działaniem aplikacji.
Załóżmy że napisałem program, który ma za zadanie odpalenie dowolnego z 5 innych. Wszystkie one skopiowane są przez instalator do katalogu
Program Files (x86). Program je wywołujący jak i programy wywoływane zapisują swoje dane w katalogu ich instalacji.

Np:
C:\Program Files (x86)\MójProgram\Starter.exe
C:\Program Files (x86)\MójProgram\Program1\App1.exe
C:\Program Files (x86)\MójProgram\Program1\App1.ini
...
C:\Program Files (x86)\MójProgram\Program5\App5.exe
C:\Program Files (x86)\MójProgram\Program5\App5.ini

Problem:
W nowoczesnych systemach program nie może zapisać bez odpowiednich uprawnień swoich ustawień w katalogach systemowych.
Aby zatem móc to zrobić wymagane jest podniesienie jego uprawnień poprzez UAC. Możemy rozpatrzyć 3 scenariusze.

  1. Podniesienie uprawnień dla aplikacji zapisującej dane
  2. Zmiana uprawnień do katalogu instalacji i przypisanie mu prawa modyfikacji
  3. Użycie katalogu innego niż systemowy (instalacji), jak np. %appdata% (czyli poprawne zachowanie).

Moje pytanie jest takie. Która z wymienionych metod jest prawidłowa i dlaczego?

Ps: Załóżmy, że UAC jest niewygodny i nie chcemy go uzywać (chcemy mieć możliwość dowolnego zapisu danych, jak w czasach WinXP).
Czy pomysł modyfikacji uprawnień katalogu instalacji przez instalator jest sensowna? Co ryzykujemy?

Proszę potraktować temat jako swobodne rozważania.
-Pawel

0
  1. poprawne (wg. założeń autorów systemu) jest rozwiązanie nr 3 bo nie powinno się grzebać w miejscach, które do tego nie są przeznaczone
  2. Nie do końca jest prawdą, że nie można zapisywać do PF bez uprawnień admina - od Visty jest coś takiego jak C:\Users\<username>AppData\Local\VirtualStore\Program Files(x86) gdzie lądują pliki, które próbuje zapisać aplikacja do Program Files(x86)
0

OK,
A teraz rozważmy taką sytuację.
Program odpalony jest na prawach zwykłego użytkownika. Zachodzi potrzeba zapisu jakiś danych. Załóżmy, że program musi zapisać dane tam, gdzie wymagane jest podniesienie uprawnień. Program nie zawiera obsługi takiej sytuacji. Zatem próba zapisu w takim katalogu nie powiedzie się! Dane nie zostaną zapisane.

**Pytanie jest takie. Skąd mam wiedzieć (program), że zapisanie danych (np. do pliku INI) wymaga podniesienia uprawnień? **
Czy to tylko kwestia przechwycenia wyjątku i odpowiedniej reakcji?
(jeśli ujmę blok kodu zapisu danych, to dostaję wyjątek: EIniFileException -> Unable to write to ŚCIEŻKA ZAPISU)
-Pawel

0

niekoniecznie - patrz mój post wyżej - po prostu windows zapisze gdzie indziej

0

@abrakadaber dobrze gada. Przecież większość starych programów przestałaby działać od czasów Visty, gdyby nagle wymagać od programów weryfikacji czy trzeba zażądać podniesienia uprawnień, żeby cośtam zapisać.

0

I dobrze gada, i niedobrze. Nie wszystkie katalogi są wirtualizowane, nie wszystkie aplikacje będą miały wirtualizowany dostęp, ponadto sama wirtualizacja może być wyłączona.
Normalnie program zawiera manifest, w którym jest zapisana informacja, że potrzebuje wyższych uprawnień. Poprawną metodą obsługi w Windowsie jest pisanie do katalogu użytkownika lub zaznaczenie w manifeście, że chce się mieć uprawnienia, wtedy system przy uruchomieniu programu wyświetli o tym informację. Poleganie na wirtualizacji jest słabym pomysłem, bo nie ma pewności, że w przyszłych systemach będzie ona ciągle obecna (czytałem plotki, że to tylko przejściowe rozwiązanie).
A jeżeli chcesz z wnętrza aplikacji sprawdzić, czy masz uprawnienia, to dowód przez próbę zapisu i otrzymanie wyjątku jest wystarczający. Większość aplikacji wtedy informuje użytkownika o błędzie (opcjonalnie sugerując odpalenie programu jako administrator) i przerywa operację.

0

Moje pytanie jest takie. Która z wymienionych metod jest prawidłowa

Program nie powinien zapisywać niczego w swoim katalogu, ani w żadnym katalogu Windowsa.

Należy pobrać ścieżkę do katalogu z profilem użytkownika, tam utworzyć podkatalog i tam zapisywać.
Sposób pobrania ścieżki zależy od języka programowania, ale jest np. zmienna środowiskowa APPDATA, więc można spróbować zapisu pod ścieżką %APPDATA%\cośtam.

Nie należy zakładać że to jest C:\Users\nazwa\cośtam bo struktura katalogów wygląda inaczej pod XP a inaczej pod Vistą (więc może się znowu zmienić w przyszłości), na dodatek system wcale nie musi być na C:.

i dlaczego?
Bo tak zaleca Microsoft.

1 użytkowników online, w tym zalogowanych: 0, gości: 1