Regestry
-
ich hab das nun so geändert:
HKEY hkey; HKEY KEY = HKEY_LOCAL_MACHINE; char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"}; char name[100]= {"Programm"}; char value[100]= {"C:\\Temp\\Programm.exe"}; RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey); long rOpen = RegQueryValueEx(hkey,name,0,0,0,0); RegCloseKey(hkey); // Überprüfen ob der Schlüssel in der Registry schon vorhanden ist if(rOpen != ERROR_SUCCESS) { // In die Registry eintragen RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey); RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value)); ShowMessage("Schlüssel neu angelegt"); RegCloseKey(hkey); }
wie kann ich folgendes prüfen, ich glaub ich hab einen error:
- prüfen, ob RegOpenKeyEx fehlschlägt
- Den (evtl. ungültigen) hKey benutzt Du einfach so, egal ob es ein gültiger Handle ist
- RegSetValueEx -> hKey auf Gültigkeit prüfen!cu surf..
-
- KEY_ALL_ACCESS endlich durch KEY_READ bzw. KEY_WRITE ersetzen.
- Auch die Funktion RegOpenKeyEx hat einen Rückgabewert, nachzulesen in der MSDN
-
hi.....meinst du so??
passt das nun oder was soll ich noch machen??HKEY hkey; HKEY KEY = HKEY_LOCAL_MACHINE; char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"}; char name[100]= {"Programm"}; char value[100]= {"C:\\Temp\\Programm.exe"}; RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_READ,&hkey); long rOpen1 = RegQueryValueEx(hkey,name,0,0,0,0); RegCloseKey(hkey); // Überprüfen ob der Schlüssel in der Registry schon vorhanden ist if(rOpen1 != ERROR_SUCCESS) { // In die Registry eintragen long rOpen2 = RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_WRITE,&hkey); if(rOpen2 != ERROR_SUCCESS) { ShowMessage("Fehler beim schreiben in die Registry"); } else { RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value)); ShowMessage("Schlüssel neu angelegt"); } RegCloseKey(hkey); } }
cu surf.
-
Du prüfst immer noch nicht, ob RegOpenKeyEx fehlschlägt oder nicht (zumindest nicht beim ersten Aufruf vor RegQueryValueEx), stattdessen gehst Du einfach davon aus, das es immer funktioniert (und benutzt den möglicherweise ungültigen hKey einfach so).
-
wie überprüfe ich ob RegOpenKeyEx fehlschlägt??? wie überprüfe ich einen ungültigen hKey??? bitte danke!
cu
-
HKEY hkey; HKEY KEY = HKEY_LOCAL_MACHINE; char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"}; char name[100]= {"Programm"}; char value[100]= {"C:\\Temp\\Programm.exe"}; long rOpen1 = RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_READ,&hkey); long rQuery1 = RegQueryValueEx(hkey,name,0,0,0,0); RegCloseKey(hkey); // Überprüfen ob der Schlüssel in der Registry schon vorhanden ist if(rOpen1 != ERROR_SUCCESS && rQuery1 != ERROR_SUCCESS) { // In die Registry eintragen long rOpen2 = RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_WRITE,&hkey); if(rOpen2 != ERROR_SUCCESS) { ShowMessage("Fehler beim Schreiben in die Registry"); } else { RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value)); ShowMessage("Schlüssel neu angelegt"); } RegCloseKey(hkey); } }
passt das so???
cu surf
-
HKEY hkey; char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; char name[] = "Programm"; char value[]= "C:\\Temp\\Programm.exe"; long rQuery, rOpen; rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0, KEY_READ, &hkey); if(rOpen == ERROR_SUCCESS) { // Registry konnte geöffnet werden! Somit ist hKey gültig! rQuery = RegQueryValueEx(hkey, name, 0, 0, 0, 0); if(rQuery != ERROR_SUCCESS) { //Key existiert noch nicht! RegCloseKey(hkey); // In die Registry eintragen rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0, KEY_WRITE, &hkey); if(rOpen != ERROR_SUCCESS) { ShowMessage("Fehler beim Schreiben in die Registry"); } else { RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value)); RegCloseKey(hKey); ShowMessage("Schlüssel neu angelegt"); } } else RegCloseKey(hkey); } else ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen
-
hi!! danke!!
aber wenns den eintrag in der registry schon gibt dann kommt fehler beim auslesen der registry!!!??? ist das gewollt?cu surf
-
Du hast zu früh geguckt, war noch nicht fertig...
Habs korrigiert...
-
wer er einen neuen schlüssel anlegt dann bekomm ich access violation!!?????
cu
-
else RegCloseKey(hkey); } else ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen
das RegCloseKey(hkey); gehört da raus!!! oder?
cu
-
Warum? Du mußt doch den geöffneten Key wieder schließen... Wo bekommst Du denn die Access-Violation?
-
du hast 2 mal RegOpenKeyEx!!!
und bei dir 3 mal RegCloseKey!!!
das kann ja nicht gehn!!cu
-
Au Mann...
Die Bedeutung von if.. else... ist Dir aber schon bewußt, ja?
-
aber was nützt das wenn ich einen access voilation error bekomme
-
Wenn Du in der Lage bist if... else... aufzulösen, dann macht Dein voriger Satz, ich zitiere:
du hast 2 mal RegOpenKeyEx!!!
und bei dir 3 mal RegCloseKey!!!
das kann ja nicht gehn!!gar keinen Sinn...
und wenn Du lesen könntest, würdest Du den kleinen Schreibfehler bei RegCloseKey(hKey); selber entdecken... zumal Dein Compiler da meckern müßte...
Und nochwas:
Auf meinem System gibt es hier mit exakt demselben Code keine Access-Violation, auch nicht wenn er den Schlüssel neu anlegt!
-
HKEY hkey; char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; char name[] = "Programm"; char value[]= "C:\\Temp\\Programm.exe"; long rQuery, rOpen; rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0, KEY_READ, &hkey); if(rOpen == ERROR_SUCCESS) { // Registry konnte geöffnet werden! Somit ist hKey gültig! rQuery = RegQueryValueEx(hkey, name, 0, 0, 0, 0); if(rQuery != ERROR_SUCCESS) { //Key existiert noch nicht! RegCloseKey(hkey); // In die Registry eintragen rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0, KEY_WRITE, &hkey); if(rOpen != ERROR_SUCCESS) { ShowMessage("Fehler beim Schreiben in die Registry"); RegCloseKey(hkey); } else { RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value)); RegCloseKey(hkey); ShowMessage("Schlüssel neu angelegt"); } } } else { ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen }
so das müsste passen!!
danke no mal!!
cu
-
du öffnest 2 mal und schließt drei mal...hattest das was falsch mit den klammern!!
-
HKEY hkey; char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; char name[] = "Programm"; char value[]= "C:\\Temp\\Programm.exe"; long rQuery, rOpen; rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0, KEY_READ, &hkey); if(rOpen == ERROR_SUCCESS) { // Registry konnte geöffnet werden! Somit ist hKey gültig! rQuery = RegQueryValueEx(hkey, name, 0, 0, 0, 0); if(rQuery != ERROR_SUCCESS) { //Key existiert noch nicht! RegCloseKey(hkey); // In die Registry eintragen rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0, KEY_WRITE, &hkey); if(rOpen != ERROR_SUCCESS) { ShowMessage("Fehler beim Schreiben in die Registry"); RegCloseKey(hkey); } else { RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value)); RegCloseKey(hkey); ShowMessage("Schlüssel neu angelegt"); } } else { RegCloseKey(hkey); } } else { ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen }
-
surf. schrieb:
du öffnest 2 mal und schließt drei mal...hattest das was falsch mit den klammern!!
Deine {} Klammern bei else... sind unnötig, aber lassen wir das...
Und ich öffnete nicht zweimal und schließe dreimal....
Du solltest Dein C-Wissen in Sachen if/else mal nachbessern, dann passieren Dir solche Aussagen auch nicht...Und das gibt garantiert 'ne Access-Violation:
rOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)place, 0, KEY_WRITE, &hkey); if(rOpen != ERROR_SUCCESS) { ShowMessage("Fehler beim Schreiben in die Registry"); RegCloseKey(hkey); }
Wernn RegOpenKeyEx fehlschlägt, wurde kein Key geöffnet, Und Du willst ihn trotzdem schließen --> BANG!
DU öffnest nun 2 Keys und willst 3 schließen....