[Win 2000] Registryeintrag für Autostart von Programm funktioniert nicht

trench140

Mitglied
Hallo,

ich lese per GetModuleFileName den aktuellen Pfad eines Programmes aus und trage ihn anschließend in die Registry unter "Run" ein.

Code:
char buffer[MAX_PATH];
HKEY hkey;

GetModuleFileName(NULL,buffer,MAX_PATH);
RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hkey,0)
RegSetValueEx(hkey,"MyProgram",0,REG_SZ,(const unsigned char*)buffer,sizeof(buffer));

Problem:
Das Programm wird beim Neustart nicht gestartet, der EIntrag in der Registry ist aber vorhanden. Nun ist mir aufgefallen, dass der Programmpfad in der Registry so aussieht:

Code:
C:\Documents and Settings\Administrator\Desktop\main.exe...

Diese drei Punkte am Ende sind meiner Auffassung nach falsch, ich weiß aber nicht, woher sie kommen. Wenn ich mir den Programmpfad ausgeben lasse tauchen dort nirgendwo die drei Punkte auf.

Wenn ich nun per regedit diesen Schlüssel öffne und mit OK schließe, sind die drei Punkte verschwunden. Das Programm startet jedoch trotzdem nicht automatisch.

Woran kann das liegen? Ich hatte erst an ein Problem mit der String-Termination gedacht, aber soweit ich das verstehe liefert GetModuleFileName ja einen null-terminierten String, sofern dieser nicht größer als der gegebene Buffer ist.

Zum Einsatz kommt in der aktuellen Entwicklungsumgebung Windows 2000 SP 0.

Gruß,
Trench
 
Hallo,

habe nun ein Teilproblem gelöst. Wenn ich den Registry-Eintrag mit strlen(buffer)+1 statt sizeof(buffer) erstelle, wird er korrekt terminiert.

Das Problem ist, dass er dennoch nicht ausgeführt wird. Nun habe ich mein Programm einfach mal nach "C:\" kopiert, und siehe da, beim Neustart wurde es ausgeführt.
Ich habe nun den Eindruck, dass die Leerzeichen im Dateinamen stören, wie kann ich diesen Fehler beheben? Gibts da eine Möglichkeit die Leerzeichen korrekt zu escapen oder so?
 

Neue Beiträge

Zurück