Regestry
-
ich hab no immer das problem mit admin recht.....nur das reinschreibn geht wenn ich admin bin...sonst ebn nicht!!!
ich will die registry auslesen ob der schlüssel schon vorhanden ist:
mach i das so:???????DWORD dwData = 256; BYTE cDaten[256] = ""; RegQueryValueEx(hKey,"Programm",0,0,cDaten,&dwData2);
cu
-
die letzten beiden Parameter könntest du auch noch auf NULL bzw. 0 setzen
-
DWORD dwData = 256;
BYTE cDaten[256] = "";
RegQueryValueEx(hKey,"Programm",0,0,0,0);wie kann ich jetzt rausfinden obs den schlüssel schon gibt?????
if(......kein schlüssel
dann schlüssel anlegenelse
keinen schlüssel anlegen da schlüssel schon vorhanden ist!!!!!!!!!!!
-
indem du den Rückgabewert überprüfst (ERROR_SUCCESS wenn alles glatt ging)
-
DWORD dwData = 256;
int iLastError = 0;
HKEY hkey;
HKEY KEY = HKEY_LOCAL_MACHINE;BYTE cDaten[256] = "";
iLastError = RegQueryValueEx(hKey,"Programm",0,0,0,0);if(!iLastError) // Wenn noch nicht in die Registry eingetragen wurde dann...
{
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);
RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value));
RegCloseKey(hkey);
}
-
DWORD dwData = 256; HKEY hkey; HKEY KEY = HKEY_LOCAL_MACHINE; BYTE cDaten[256] = ""; long rOpen = RegQueryValueEx(hKey,"Programm",0,0,0,0); // warum sind die Parameter am Schluss alle 0 ??? // Wenn noch nicht in die Registry eingetragen wurde dann... if(rOpen != ERROR_SUCCESS) { 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); RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)value, strlen(value)); RegCloseKey(hkey); }
-
Das RegOpenKeyEx müsste imho vor RegQueryValueEx stehen.
Warum sind alle Parameter NULL?: ganz einfach - du bist nicht an den Daten interessiert, sondern willst nur wissen, od der Wert existiert- cDaten brauchst du also gar nicht
-
ok ich glaub so passt es oder?
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); // Ü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)); } RegCloseKey(hkey);
kann man deiner meinung sonst noch was verbessern?
cu
-
KEY_ALL_ACCESS
Wunder Dich nicht, wenn ein Benutzer ohne Adminrechte Dein Programm benutzt, und es nicht funktioniert!
- Du prüfst nicht, ob RegOpenKeyEx fehlschlägt (was beim "normalen" Benutzer mit KEY_ALL_ACCESS definitiv fehlschlägt)!
- Den (evtl. ungültigen) hKey benutzt Du einfach so, egal ob es ein gültiger Handle ist
- Selbiges bei RegSetValueEx -> hKey wird nicht auf Gültigkeit überprüft!
-
So wie dein Code derzeit ausseiht ist das 2. RegOpenKeyEx überflüssig / falsch bzw. es fehlt ein RegCloseKey.
Falls du den Schüssel zuerst nur mit Lese-Berechtigung öffnest ist ein zweiter Aufruf von RegOpenKeyEx mit Schreib-Berechtigung schon ok, allerding fehlt dann eben wie gesagt das RegCloseKey für den 1. Aufruf von RegOpenKeyEx
-
vielleicht hab ich glück und hab die rechte;-)
cu
-
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...