Registry Einträge in einer Datei abspeichern



  • Hallo C++ Programmierer,

    ich möchte bestimmte Registry Schüssel in einer anzulegenden Datei sichern.
    Momentan komme ich aber im Code nicht weiter...

    ... Nach dem auslesen des Registry Schüssels, legt das Programm dann anschließend auch eine Datei, wie von mir vorgegeben an, aber diese enthält leider keine Daten.

    Anbei mal mein Code:

    void CMFCDlgTestDlg::OnButtonImport() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	UpdateData(TRUE);
             HKEY hKey;
    	LONG res;
    	DWORD dwIndex = 1, dwName, dwData;
    	char lpName[MAX_PATH], lpData[MAX_PATH];
    	unsigned char lpProductName[255];
    	unsigned long size = sizeof(lpProductName);
    	LPCTSTR lpFile = "regtest.txt";
    
    	RegSaveKey(hKey, lpFile, NULL);
    
    	RegQueryValueEx(hKey,
    		"ProductName",
    		NULL,
    		NULL,
    		lpProductName,
    		&size);
    	m_Data = lpProductName;
    	RegCloseKey(hKey);
    
    	UpdateData(FALSE);
    }
    

    Ich würde mich freuen, wenn mir jemand bei meinem Problem weiterhelfen könnte.

    Danke und schönen Abend!



  • mal ne frage, warum beneutzt du UpdateData ??? Du liest und schreibst in keine edit felder zum bsp.

    das andere ist. wo schreibst du den in die datei rein? Wo öffnest und schliesst du das file? stichwort CFile. du deklariest lokal z.b. LONG res. und dann? wann tutst du es benuetzen? hast im debugger geschaut ob es den schlüssel-wert enthält?



  • [edit]ups - war quatsch[/edit]



  • OK, was hast du eigentlich vor?

    Du rufst RegSaveKey mit einem nicht initialisierten HKEY auf, welcher Schlüssel soll denn bitte gespeichert werden?



  • Hallo zusammen,

    ich möchte einen einzelnen Key bzw. einen Key und dessen Unterstruktur in eine Datei sichern und auch wiedre zurückspielen können, bei eventuellem Datenverlust...

    ...Da Ihr mir hier gesagt habt, das der COde nicht ganz so in Ordnung ist, würde ich mich freuen, wenn mir einer als Newbie helfen könnte und mir eventuell einen Code zur Verfügung stellen könnte oder mir weiterhelfen könnte.

    Vielen Dank für Eure Unterstützung



    1. RegOpenKeyEx für den zu speichernden key
    2. RegSaveKey zum Abspecihern, RegLoadKey zum laden
    3. RegCloseKey

    Achtung: für RegSaveKey benötigt der aufrufende Prozeß Backup privileges

    HKEY hkey;
    DWORD err = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\MyCompany\\MyApp", KEY_READ, &hkey);
    err = RegSaveKey(hkey, "c:\\temp\\registrytest.reg", NULL);
    RegCloseKey(hkey);
    


  • Hallo Peterchen,

    vielen Dank erstmal für Deine Hilfe, ich habe meinen Code nun Deinem angepasst und erhalte dann zwar die Datei, die ich benötige, aber leider auch ohne Inhalt.

    Hier noch mal der Code:

    void CMFCDlgTestDlg::OnButtonImport() 
    {
    HKEY hkey; 
    
    DWORD err = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion",0, KEY_READ, &hkey); 
    err = RegSaveKey(hkey, "c:\\registrytest.reg", NULL); 
    RegCloseKey(hkey); 
    }
    

    Falls ich irgendwie etwas falsch gemacht haben sollte.

    Danke für Deine Hilfe!



  • sieht auf den ersten blick gut aus - was sind denn die beiden err's die zurückkommen?



  • Das sind Fehlermeldungscodes.
    ERROR_SUCCESS bedeutet kein Fehler.
    Mit FormatMessage erhälst du mehr Informationen über die Fehler.

    Grüße Rapha



  • Hallo zusammen,

    wo müsste er mir die beiden errs denn ausgeben?



  • Eigentlich wollt ich nur wissen, was drin steht 🤡

    beide sollten 0 sein. guck sie dir halt mal mit dem Debugger an, oder mach ein ASSERT oder Trace.

    [edit]Mann, Ich brauch Urlaub![/edit]



  • Hallo,

    folgende Fehlermeldung erhalte ich im Debug Fenster

    Warning: no listbox item selected.
    Thread 0x120 wurde mit Code 0 (0x0) beendet.
    Das Programm "C:\Dokumente und Einstellungen\Marc\Desktop\MFCDlgTest\Debug\MFCDlgTest.exe" wurde mit  Code 0 (0x0) beendet.
    

    Hoffe das hilft Dir/Mir weiter...



  • nicht wirklich 😉

    füg mal zwei Traces ein:

    DWORD err = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion",0, KEY_READ, &hkey); 
    TRACE("RegOpenKeyEx: err=%Xh\n", err);
    err = RegSaveKey(hkey, "c:\\registrytest.reg", NULL); 
    TRACE("RegSaveKey: err=%Xh\n", err);
    RegCloseKey(hkey);
    


  • Das habe ich dann im Debug Modus herausgefunden:

    Warning: no listbox item selected.
    RegOpenKeyEx: err=0h
    RegSaveKey: err=522h
    Thread 0xA8C wurde mit Code 0 (0x0) beendet.
    Das Programm "C:\Dokumente und Einstellungen\Marc\Desktop\MFCDlgTest\Debug\MFCDlgTest.exe" wurde mit  Code 0 (0x0) beendet.
    


  • Fehlt höchstwahrscheinlich das BVackup Privilege für de angemeldeten User (522h - Der Client besitzt ein erforderliches Recht nicht.)

    Sollte aber als Admin gehen...



  • Das ist aber merkwürdig, da ich an meinem PC mit lokalen Administratorrechten angemeldet bin. ALles sehr merkwürdig, wie ich finde...



  • Hallo C++ Gemeinde,

    kann mir vielleicht jemand bei meinem Problem weiterhelfen, da ich hier an diesem Punkt einfach nicht weiterkomme. Vielen Dank für Eure Super Unterstützung.



  • Hallo zusammen,

    kann mir denn wirklich keiner bei meinem Problem weiterhelfen???

    Das Problem besteht darin, das er zwar nun mit dem neuen C++ Code die Datei anlegt, aber leider auch ohne Inhalt. Administratorrechte sind vorhanden.

    Danke für Eure Hilfe



  • Hallo,

    da ich nun in einigen Beiträgen gelesen habe, das man auch als Administrator unter Windows NT, 2000 und XP noch spezielle Rechte benötigt, wollte ich Euch fragen, da ich den Code aus den anderen Beiträgen nicht vertshe, ob sich jemand bereit erklären würde und mir das in den vorhandenen Code integrieren könnte. Danke schon mal vorab für Eure Hilfe!

    void CMFCDlgTestDlg::OnButtonImport()
    
    {
    HKEY hkey; 
    
    DWORD err = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion",0, KEY_ALL_ACCESS, &hkey);
    err = RegSaveKey(hkey, "c:\\registrytest.reg", NULL); 
    
    RegCloseKey(hkey); 
    }
    


  • versuch mal die msdn zu lesen - was ich so rauslese ist, das du anscheinend nicht mal weisst was,und wozu die gut ist !

    du weisst nicht mal was fehlercodes sind.....schwach


Anmelden zum Antworten