RegDeleteKey() funktioniert nicht
-
c°h° schrieb:
Naja ich will nicht den ganzen Run Ordner löschen sondern nur einen Eintrag.
Dann brauchst du RegDeleteValue, nicht RegDeleteKey.
Wozu die Casts in deinem Code? Und sag jetzt bitte nicht, dass es sonst nicht kompilierbar ist.
-
Die casts hab ich erst reingemacht nachdem es aus mir unerklärlichen Gründen nicht funktionierte. Klar ist das auch ohne casts compilierbar.
Leider führte RegDeleteValue(hKey, Aname); ja auch nicht zum Ziel - hatte RegDeleteKey schonmal auskommentiert.
-
Wenn du gar keinen Plan mehr hast: Nimm die REG-Datei-Variante. Lass dein Programm eine kleine Datei mit folgendem Inhalt anlegen:
REGEDIT4 [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] <Wertname>=-Die Leerzeile ist wichtig! Wenn du das hier getan hast, machst du einen Systemaufruf namens "regedit /s <filename.reg>". So habe ich die Registry immer bearbeitet, als ich noch nie was vom WinAPI gehört habe.
Tschö,
nullplan
-
MFK schrieb:
c°h° schrieb:
Naja ich will nicht den ganzen Run Ordner löschen sondern nur einen Eintrag.
Dann brauchst du RegDeleteValue, nicht RegDeleteKey.
Wozu die Casts in deinem Code? Und sag jetzt bitte nicht, dass es sonst nicht kompilierbar ist.
mach ich auch immer. ich bin zu faul die dateiendung die bei vc6 immer .cpp ist in .c zu ändern. als ob das jetzt so schlimm wäre. dieses besser-wisser gesülze geht einem irgendwann auf den senkel.

-
Casten ist prinzipiell schlimm... es gibt ausnahmen, wo man es muss, aber sonst macht es den COde nur unhandlich und unpflegbar...
-
Naja wie mans per regedit macht ist mir schon klar aber ich will ja ein systemsecurity und analyse Tool für meine paranoiden trojanerverfolgten Bekannten machen. Und hab keine Lust jedem zu erklären wie man die Registry manuell bearbeiten kann. Deshalb sollte mein Programm das schon können und da es ja gehen muss, werde ich auch solange weiterfummeln bis es geht
Bin bei solchen Dingen hartnäckig.Die cast Frage hat irgendwo schon ihre Berechtigung ich hab mich vor einigen Wochen mit derartigen Problemen rumgeschlagen.
Also so sieht mein aktueller Code aus leider immernoch nicht funktionstüchtig
void DelAutorunKey(char *Aname){ HKEY hKey; if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, DELETE, &hKey) == ERROR_SUCCESS ){ RegDeleteValue(hKey, Aname); //RegDeleteKey(hKey, (LPCTSTR)Aname); } else printf("RegOpenKeyEx()"); RegCloseKey(hKey); return; }Hat jmd noch eine Idee ?
-
Ach ich habs ein Recht fehlte folgender Code funktioniert

void DelAutorunKey(char *Aname){ HKEY hKey; if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, DELETE | KEY_SET_VALUE , &hKey) == ERROR_SUCCESS ){ RegDeleteValue(hKey, Aname); //RegDeleteKey(hKey, (LPCTSTR)Aname); } else printf("RegOpenKeyEx()"); RegCloseKey(hKey); return; }MFG c°h°
-
Und für's nächste Mal merken wir uns: Fehlersuchmethode Nummer 1: Rückgabewerte prüfen.
-
Es ist meistens Hilfreich, wenn Du genau sagst, was nicht geht; also z.B. den Fehlercode der zurückgeliefert wurde!
Nebenbei würde ich den Key nicht mit "DELETE" sondern mit "KEY_SET_VALUE" öffnen, dann würde es zumindest der Doku entsprechen...
-
Ich werds mir merken
Danke für eure Hilfe
