Zapis do INI bez uprawnień administratora

dział ogólny

Zapis do INI bez uprawnień administratora

Nowy postprzez Mironas » piątek, 31 października 2014, 13:38

Windows XP.
Program uruchomiony z konta z uprawnieniami administratora tworzy plik INI w katalogu danych aplikacji.
Następnie uruchamiam ten sam program z innego konta (bez uprawnień administratora) i przy próbie zapisu do pliku INI dostaję komunikat:

Unable to write to C:\Documents and Settings\All Users\Dane aplikacji\XXXX\Testuj.ini



Można jakoś wpłynąć aby plik INI był dostępny dla wszystkich użytkowników?
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez polymorphism » piątek, 31 października 2014, 18:29

Zapewne jest to kwestia ustawienia odpowiednich praw dostępu. Jeśli mnie pamięć nie myli, w profilu all users użytkownik może modyfikować zawartość pliku, ale nie może go usunąć. Prawdopodobnie klasa do obsługi plików INI próbuje podmienić starą wersję pliku na nową. I stąd ten błąd.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez Cyfrowy Baron » sobota, 1 listopada 2014, 15:16

Jeśli chcesz, żeby program pracował prawidłowo na kontach bez uprawnień administratora, to zapisuj pliki w katalogu użytkownika, wtedy nie będzie takich niespodzianek.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez Cyfrowy Baron » niedziela, 2 listopada 2014, 10:49

Szukałem informacji na ten temat i cokolwiek umieścisz w katalogu All Users/Dane Aplikacji to zwykli użytkownicy będą mieć dostęp tylko w trybie do odczytu. Jedynym rozsądnym wyjściem z tej sytuacji, jest użycie jakiegoś katalogu z uprawnieniami do odczytu i do zapisu dla wszystkich użytkowników. Może katalog Dokumenty publiczne - w Win7 to C:\Users\Public\Documents (CSIDL_COMMON_DOCUMENTS) - w Windows XP będzie to chyba C:\Documents and Settings\All Users\Documents. Sprawdź jakie ma uprawnienia dla wszystkich użytkowników ten katalog w Windows XP, bo w Windows 7 wszyscy mają pełen dostęp. Możesz w tym katalogu bez problemu utworzyć własny katalog dla programu nawet z poziomu użytkownika.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Mironas
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez polymorphism » niedziela, 2 listopada 2014, 12:27

(...) w katalogu All Users/Dane Aplikacji to zwykli użytkownicy będą mieć dostęp tylko w trybie do odczytu.

Sprawdziłem, jak to wygląda w XP, i faktycznie jest tak jak piszesz. Wcześniej pisałem, że możliwa jest modyfikacja, ale jednak nie jest - dziedziczenie praw do "modyfikacji" nie dotyczy plików. Wystarczy dodać katalog z dodatkowym prawem do modyfikacji i usuwania plików, i po problemie ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez Cyfrowy Baron » niedziela, 2 listopada 2014, 12:28

polymorphism napisał(a):Wystarczy dodać katalog z dodatkowym prawem do modyfikacji i usuwania plików, i po problemie ;)


Chodzi tobie o katalog All Users/Dane Aplikacj?!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez polymorphism » niedziela, 2 listopada 2014, 12:31

Tak.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez Cyfrowy Baron » niedziela, 2 listopada 2014, 12:36

Zauważyłem, że wiele programów wrzuca pliki współdzielone przez wszystkich użytkowników bezpośrednio do katalogu Users/Public, czyli nawet nie do "Users/Public/Documents". W przypadku Windows XP było by to: C:\Documents and Settings\All Users - czyli to jest chyba to o czym piszesz.. Tylko czy katalog utworzony bezpośrednio w C:\Documents and Settings\All User będzie od razu dostępny w trybie do odczytu i do zapisu bez modyfikacji uprawnień, tak jak to ma miejsce w przypadku Users/Public?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez polymorphism » niedziela, 2 listopada 2014, 12:41

Pliki nie będą w pełni dostępne - pisałem o tym. Trzeba nowemu katalogowi dodać dodatkowe uprawnienia, które będą dziedziczyć pliki w nim stworzone.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez Cyfrowy Baron » niedziela, 2 listopada 2014, 12:42

Czyli trochę inaczej niż to jest w przypadku Windows Vista/7 i pewnie 8.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez polymorphism » niedziela, 2 listopada 2014, 12:46

Eeee, pewnie tak samo. Przecież w 7-ce te katalogi mają pełnić tę samą funkcję co w XP - później zobaczę.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez Cyfrowy Baron » niedziela, 2 listopada 2014, 12:56

Z tego co pisałeś to nie! Przecież jeżeli w katalogu User/Public stworzysz katalog to bez modyfikacji uprawnień będzie w pełni dostępny dla wszystkich.

Windows 7: Users/Public/Documents
Windows XP: Document and Settings/All Users/Documents

Jeżeli to te same katalogi (odpowiedniki), to po skróceniu otrzymujemy:

Windows 7: Users/Public
Windows XP: Document and Settings/All Users

Rzecz w tym, że Windows 7 też ma katalog All Users - Users/All Users.

Co w Windows XP zwraca CSIDL_COMMON_DOCUMENTS? Z tego co wiem to właśnie Document and Settings/All Users/Documents, a w Windows 7 Users/Public/Documents. Nie da się tych katalogów tak skrócić by otrzymać w obydwu systemach to samo.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez polymorphism » niedziela, 2 listopada 2014, 13:16

Chwila, od początku jest mowa o CSIDL_COMMON_APPDATA, czyli:
  • WinXP -> C:\Documents and Settings\All Users\Application Data (lub "Dane Aplikacji")
  • Win7 -> C:\ProgramData
Właśnie sprawdziłem prawa dostępu tego katalogu w 7-ce, i są one dokładnie takie same jak w XP. Zatem rozwiązanie również będzie takie same.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez Cyfrowy Baron » niedziela, 2 listopada 2014, 13:19

Ala ja zaproponowałem użycie CSIDL_COMMON_DOCUMENTS w celu rozwiązania problemu z uprawnieniami.

Cyfrowy Baron napisał(a):Szukałem informacji na ten temat i cokolwiek umieścisz w katalogu All Users/Dane Aplikacji to zwykli użytkownicy będą mieć dostęp tylko w trybie do odczytu. Jedynym rozsądnym wyjściem z tej sytuacji, jest użycie jakiegoś katalogu z uprawnieniami do odczytu i do zapisu dla wszystkich użytkowników. Może katalog Dokumenty publiczne - w Win7 to C:\Users\Public\Documents (CSIDL_COMMON_DOCUMENTS) - w Windows XP będzie to chyba C:\Documents and Settings\All Users\Documents. Sprawdź jakie ma uprawnienia dla wszystkich użytkowników ten katalog w Windows XP, bo w Windows 7 wszyscy mają pełen dostęp. Możesz w tym katalogu bez problemu utworzyć własny katalog dla programu nawet z poziomu użytkownika.


Potem rozważałem dostęp do katalogu C:\Users\Public - czyli bez konieczności tworzenia katalogów w Documents. Ale w Windows XP brak odpowiednika.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Zapis do INI bez uprawnień administratora

Nowy postprzez polymorphism » niedziela, 2 listopada 2014, 13:34

A to nie to samo co Dokumenty Udostępnione (czy jakoś tak)?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości