Regestry
-
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....
-
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); ShowMessage("Schlüssel schon vorhanden"); } } else { RegCloseKey(hkey); ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen }
passts nun? ich hoffe *g*
-
Du haust da immer mehr Fehler rein... aber da Du ja genau weißt, was Du tust...
Ich sags jetzt nur noch einmal:
Wenn RegOpenKeyEx fehlschlägt (das bedeutet ReturnWert != ERROR_SUCCESS), dann wird kein Handle geöffnet, hkey ist somit ungültig und es KNALLT wenn man dann mit RegCloseKey das Ding schließen will!#define KNALLT Access-Violation
-
ich poste mal zum schluss das richtige *g* :
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 { ShowMessage("Schlüssel schon vorhanden"); RegCloseKey(hkey); } } else { ShowMessage("Fehler beim Öffnen der Registry"); //Man könnte nun mit GetLastError den Grund abfragen }
-
...und wenn Du mir nun noch den Unterschied zwischen meiner Version (vor zig Beiträgen gepostet) und deiner Version erklärst...
Abgesehen von einem unnötigen {}-Block im letzten else und einem hinzugefügtem ShowMessage sehe ich keinen Unterschied...
-
cu
-
surf. schrieb:
weiß net...aber so funzt es halt!
...ohne Worte