Tworzenie klucza

dział ogólny

Tworzenie klucza

Nowy postprzez Michal-S2 » sobota, 28 lutego 2009, 00:35

Witam,
Mam problem z tworzenie klucza w rejestrze. Próbowałem z takim kodem, ale nie działa:
Kod: Zaznacz cały
TRegistry *Rejestr = new TRegistry();
Rejestr->RootKey = HKEY_CURRENT_USER;
Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies", false);
Rejestr->CreateKey("System");
delete Rejestr;

Wiecie jak ten kod powinien wyglądać?
(w pliku nagłówkowym mam dodaną bibliotekę <Registry.hpp>)
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
Podziękował : 1
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez banita » sobota, 28 lutego 2009, 01:36

a masz odpowiednie uprawnienia w systemie?
jestes pewny ze klucz istnieje? flaga na false oznacza ze nie bedzie on utwozony w razie jego braku.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez Cyfrowy Baron » sobota, 28 lutego 2009, 09:39

A w jakim systemie to robisz, bo u mnie w WinXP klucz o nazwie System już istnieje w lokalizacji HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\

przetestowałem Twój kod w systemie WinXP i bez problemu utworzyłem klucz System2
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
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez wargo » sobota, 28 lutego 2009, 11:29

W funkcji CreateKey należy podać pełną ścieżkę albo nie używać tej funkcji i w funkcji OpenKey podać true zamiast false.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez Cyfrowy Baron » sobota, 28 lutego 2009, 12:56

W funkcji CreateKey należy podać pełną ścieżkę albo nie używać tej funkcji i w funkcji OpenKey podać true zamiast false.


Nic nie trzeba... kod jest poprawny, przecież napisałem, że go użyłem (testowałem) i u mnie utworzyło klucz, ale nie o nazwie System, gdyż taka nazwa klucza już istniała w podanej lokalizacji, lecz z powodzeniem utworzyłem w tej lokalizacji klucz o nazwie System2.

Jeżeli próbujesz utworzyć klucz w rejestrze w systemie Vista, to z tego co mi wiadomo, bez nadania specjalnych uprawnień programowi n ie uda się to Tobie.

W funkcji CreateKey należy podać pełną ścieżkę


Funkcja CreateKey oczekuje wartości typu String i nie całego drzewa ("pełnej ścieżki)", gdyż w przypadku klasy TRegistry najpierw otwiera się ROOT KEY, potem za pomocą funkcji OpenKey otwiera się drzewo kluczy, a drugi parametr tej funkcji decyduje, o tym czy funkcja ma tworzyć klucz jeżeli nie istnieje, przy false klucz nie zostanie utworzony, a przy true zostanie, jednak nie odnosi się to w żaden sposób d funkcja CreateKey.

Tak wiec klucz System2 można utworzyć na dwa różne sposoby, jeden z wykorzystaniem funkcji CreateKey, a drugi z wykorzystaniem tylko funkcji OpenKey z wartością true w drugim argumencie:

Kod: Zaznacz cały
TRegistry *Rejestr = new TRegistry();
Rejestr->RootKey = HKEY_CURRENT_USER;
Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies", false);
Rejestr->CreateKey("System2");
delete Rejestr;


lub:

Kod: Zaznacz cały
TRegistry *Rejestr = new TRegistry();
Rejestr->RootKey = HKEY_CURRENT_USER;
Rejestr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System2", true); // koniecznie true
delete Rejestr;


Klucze w rejestrze można jednak tworzyć tylko na kontach z uprawnieniami administratora, czyli nie utworzy klucza program który został uruchomiony na koncie Gościa lub na koncie użytkownika z ograniczeniami.
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
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez Michal-S2 » sobota, 28 lutego 2009, 16:48

Już znalazłem przyczynę, czemu to nie działało. Mogłem sprawdzić wczoraj to na innym projekcie, ale byłem już zmęczony i chciałem iść spać. Całe zamieszanie wywołuje kod Cyfrowego Barona do odczytywania nazwy procesora (http://cyfbar.republika.pl/differ5.html#d17). Jak usunąłem ten kod to program poprawnie utworzył klucz. Co jest przyczyną tego błędu?

Cyfrowy Baron napisał(a):Jeżeli próbujesz utworzyć klucz w rejestrze w systemie Vista, to z tego co mi wiadomo, bez nadania specjalnych uprawnień programowi nie uda się to Tobie.

Jak uzyskać te specjalne uprawnienia?
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
Podziękował : 1
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez Cyfrowy Baron » sobota, 28 lutego 2009, 17:22

Jak uzyskać te specjalne uprawnienia?


Nie wiem. Nie używam Visty, ten system stopniowo zanika, każdy kto dłużej pracował na Viście w końcu przechodzi na XP jeżeli to możliwe, w pułapce są tylko Ci, którzy nabyli laptopi i Nootebok'i z systemem Vista. Uważam, że nie warto poświęcać uwagi temu systemowi, być może zmieni się coś na lepsze po wejściu systemu Windows 7.

Całe zamieszanie wywołuje kod Cyfrowego Barona do odczytywania nazwy procesora


SPRAWDZIŁEM! brak kolizji i związku, wszystko działa prawidłowo. Błąd tkwi w czymś innym.

Informacje o zasobach komputera najlepiej jest pobierać za pomocą protokołu Windows Management Instrumentation - będzie w następnej lokalizacji.
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
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez Michal-S2 » sobota, 28 lutego 2009, 18:30

Cyfrowy Baron napisał(a):Nie używam Visty, ten system stopniowo zanika, każdy kto dłużej pracował na Viście w końcu przechodzi na XP jeżeli to możliwe, w pułapce są tylko Ci, którzy nabyli laptopi i Nootebok'i z systemem Vista. Uważam, że nie warto poświęcać uwagi temu systemowi, być może zmieni się coś na lepsze po wejściu systemu Windows 7.

Z Vistą masz rację. W jednym laptopie robiłem taką akcję. Musiałem wyjąć dysk, podłączyć do komputera stacjonarnego i tam usunąłem wszystkie partycje (włącznie z partycją Recovery ) i dopiero wtedy mogłem zainstalować Windows XP.

Myślę, że w chwili wejścia na rynek Windows 7 dużo osób przeniesie się na ten system. Na jednym komputerze mam zainstalowany Windows 7 Beta 1 i jak na razie jestem bardzo zadowolony. Działa szybciej niż XP, łatwiej jest skonfigurować i ma lepszy wygląd niż Vista ;)
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
Podziękował : 1
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez Michal-S2 » czwartek, 5 marca 2009, 21:41

Cyfrowy Baron napisał(a):Jeżeli próbujesz utworzyć klucz w rejestrze w systemie Vista, to z tego co mi wiadomo, bez nadania specjalnych uprawnień programowi n ie uda się to Tobie.

(w Windows 7 Beta jest tak samo) To jak można je utworzyć. Według mnie zupełnie nie ma to sensu, ponieważ jakim sposobem ma program ma przechowywać dane konfiguracyjne itp. w rejestrze?
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
Podziękował : 1
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana

Re: Tworzenie klucza

Nowy postprzez GoldWolf » czwartek, 5 marca 2009, 22:13

Mnie działa pod Windows 7 ten kod jeśli normalnie uruchomię aplikacje to mam:

Obrazek

Jak widać nie w tym miejscu, którym chciałeś ale rozwiązuje to uruchomienie aplikacji w trybie adminia(run as admin) wtedy jest:

Obrazek

Pozostaje tylko pytanie, czy można jakoś automatycznie w aplikacji wykonać polecenie run as.....
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    NieznanyNieznana


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 3 gości