Damian155 Temat założony przez niniejszego użytkownika |
Rejestr » 2017-09-30 10:38:42 Witam, mam pytanie i problem. Gdzie zapisać informację w Rejestrze, aby zapisać mógł ją tylko administrator, ale odczytać mogli ją wszyscy ? Na początku obstawiłem HKEY_LOCAL_MACHINE\Software\ ale tutaj mam problem bo zawsze program wpisuje mi to w HK_USERS\aktualny użytkownik\Virtual...\MACHINE\SOFTWARE\. Nie wiem co robić próbowałem już wielu sposobów. Używam c++Builder i TRegistry. Tu macie kod. TRegistry * reg = new TRegistry(); reg->RootKey = HKEY_LOCAL_MACHINE; reg->Access = KEY_ALL_ACCESS; if( !reg->KeyExists( "Software\\Brand" ) ) { Label1->Caption = "KEY_ERROR"; reg->CreateKey( "Software\\Brand" ); } reg->OpenKey( "Software\\Brand", true ); reg->WriteString( "Path", "C://" );
No i tu mi zapisuje nie w tym miejscu w którym bym chciał. Jako administrator, program może to później odczytać, ale na koncie zwykłego użytkownika, już nie bo jest to u innego użytkownika. Dodam jeszcze że wszytko przeprowadzam na dwa sposoby: Jako administrator i standardowo. Proszę o pomoc. |
|
j23 |
» 2017-09-30 11:30:33 Problem wynika zapewne z tego, że Twoja aplikacja jest 32-bitowa, a system 64-bitowy. W takim przypadku niektóre poddrzewa rejestru mogą być oddzielne dla aplikacji 32-bitowych (vide HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node). Nie wiem, czy to możliwe z TRegistry, ale spróbuj użyć flagi KEY_WOW64_64KEY (powoduje, że aplikacja 32-bitowa ma "widok" rejestru aplikacji 64-bitowej) |
|
Damian155 Temat założony przez niniejszego użytkownika |
» 2017-09-30 13:01:36 Czyli po prostu zmienić RootKey na KEY_WOW64_64KEY, czy jakoś inaczej ? Nie wiem co to flagi :/ |
|
j23 |
» 2017-09-30 14:00:30 Spróbuj tak: reg->Access = KEY_ALL_ACCESS | KEY_WOW64_64KEY; PS, "C://" to nie jest poprawna ścieżka. Podwójnie to tylko backslashe dajesz. |
|
Damian155 Temat założony przez niniejszego użytkownika |
» 2017-09-30 18:17:34 No niestety nic to nie dało :/ Dalej tworzy u użytkownika. A co trzeba zrobić, aby aplikacja była 64-bitowa, jakiś kompilator inny ? |
|
j23 |
» 2017-10-01 10:56:34 Jeśli używasz CppBv6, to zapewne musisz użyć nowszego środowiska.
Próbowałeś dodawać klucze z wykorzystaniem funkcji WinAPI - RegCreateKeyEx, RegOpenKeyEx itd. (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724875(v=vs.85).aspx)? |
|
Damian155 Temat założony przez niniejszego użytkownika |
» 2017-10-01 17:53:34 Właśnie próbowałem i niestety rezultaty są takie same :/ Muszę jakoś zabezpieczyć dane przed zwykłymi użytkownikami. Znasz może sposób na zmianę uprawień do pliku w c++? Tak żeby odczyt był dla wszystkich, ale zapis tylko dla administratora. |
|
mateczek |
» 2017-10-01 19:28:06 wystarczy dorobić konto użytkownika i nadać plikowi odpowiadanie prawa na poziomie systemowym |
|
« 1 » 2 |