[C++] Werte in Registry schreiben

Gast #2226941
Lesenswert?

Hallo Leute,

ich weiß, das Thema wurde schon oft behandelt aber ich komme einfach auf 
keine Lösung.
Ich  habe folgende Funktion, geschrieben die einen Programm ins 
Autostart verzeichniss schreiben soll. Das Programm lässt sich zwar 
kompilieren aber in die Registry werden keine Werte geschrieben.
1
void install::regautostart()
2
{
3

4

5
  HKEY hkey;
6
  HKEY KEY = HKEY_CURRENT_USER;
7
  char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"};
8
  char name[100]= {"Autostart"};
9
  char value[100]= {"C:\\programm.exe"};
10

11
  RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey); 
12
  RegSetValueEx(hkey, (LPCTSTR)name, 0, REG_SZ, (BYTE *)value, strlen(value));
13
  RegCloseKey(hkey); 
14

15
}

Kann mir jemand sagen was ich da übersehe? Vielen Dank
Gast #2226979
Lesenswert?

Hat es einen Grund, daß du hkey uninitialisiert benutzt und dafür KEY 
initialisierst, aber nie verwendest?
Übrigens: Ich kenne mich mit Windows zwar nicht so aus, aber ich wette, 
daß die API-Funktionen auch dort zurückmelden, ob es geklappt hat oder 
nicht und ggf. warum.
Gast #2227175
Lesenswert?

Also prinzipiell funktioniert der Code, grad unter XP getestet. Hab hier 
allerdings Adminrechte. Wobei, unter HKEY_CURRENT_USER sollten 
eigentlich auch normale User Schreibrechte haben. Also wie schon gesagt 
- Fehlerbehandlung!

PS: Als Namen "Autostart" zu verwenden ist allerdings keine so gute 
Idee. Besser den eigenen Programmnamen dafür nutzen.
Gast #2228321
Lesenswert?

Hallo Leute,

Danke für eure hilfe. Habe es jetzt auch noch mal in einem neuen Projekt 
auf einer XP maschiene versucht und dort funktionierte es auch.

Habe dann mal die Projekt-einstellungen gesehen und gemerkt das das 
Projekt auf "UNICODE" hatte.. klar dass es dann nicht ging ;)

Vielen Dank
#2228535
Lesenswert?

Johannes schrieb:
> Habe dann mal die Projekt-einstellungen gesehen und gemerkt das das
> Projekt auf "UNICODE" hatte.. klar dass es dann nicht ging ;)

Das häTTE auch unter UNICODE funktioniert, wenn du statt:
1
  HKEY hkey;
2
  HKEY KEY = HKEY_CURRENT_USER;
3
  char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"};
4
  char name[100]= {"Autostart"};
5
  char value[100]= {"C:\\programm.exe"};
6

7
  RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey);

dieses benutzt hättest(beachte das TCHAR und das "L" vorm string:
1
   TCHAR path[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";
2
   HKEY hKey = NULL;
3
   if (RegOpenKeyEx(HKEY_CURRENT_USER, 
4
                     path,
5
                     0,
6
                     KEY_ALL_ACCESS,
7
                     &hKey) == ERROR_SUCCESS)
8
   {
9
     ...
10
   }

GRUß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren