Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rejestr

Ostatnio zmodyfikowano 2017-10-02 20:40
Autor Wiadomość
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.
C/C++
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.
P-165354
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)
P-165355
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 :/
P-165358
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.
P-165363
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 ?
P-165368
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)?
P-165373
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.
P-165387
mateczek
» 2017-10-01 19:28:06
wystarczy dorobić konto użytkownika i nadać plikowi odpowiadanie prawa na poziomie systemowym
P-165389
« 1 » 2
  Strona 1 z 2 Następna strona