C++ Win32 Problem mit Autostart

hallo

ich habe ein programm was folgenden sourcecode hat (auszugsweise):

Code:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
{	
        AddLog("WIR WURDEN GESTARTET\r\n");
        
        // gucken ob wir bereits laufen
	if( WeAreRunning()) { exit(1); return 1;}

        CreateAutostart();

        [...]

        return 0;
}

Die Funktion AddLog schreibt den übergebenen Text in eine Textdatei.
Die Funktion WeAreRunning überprüft ob wir laufen.
Die Funktion CreateAutostart erstellt einen Registry Eintrag in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, sodass das Programm bei jedem Pc Start ausgeführt wird.

Wenn ich das Programm manuell ausführe, dann wird in der Textdatei die Zeile "WIR WURDEN GESTARTET" hinzugefügt. Und auch alle anderen Funktionen werden erfolgreich ausgeführt.. Kurz gesagt: Das Programm läuft einwandfrei.

Wenn ich aber nun den Pc neustarte, dann passiert folgendes:
Keine der Funktionen wird ausgeführt (dass sehe ich daran, dass in der Log-Datei keine "WIR WURDEN GESTARTET" hinzugefügt wurde).
Aber das Programm befindet sich im Taskmanager und die Datei kann auch nicht gelöscht werden (da das Programm eben läuft). Die Prozess Auslastung dieses Prozesses ist auch normal (so wie wenn es einwandfrei laufen würde), und der in Anspruch genommene Arbeitsspeicherplatz ist auch normal.

Ich habe wirklich überhaupt gar keine Idee, warum das Programm, wenn es durch die Autostart Funktion ausgeführt wird, nicht einwandfrei läuft.

Hat irgendjemand eine Idee??
 
Benutz mal nen Debugger um herauszufinden wo der gestartete Prozess in seiner Ausführung hängt.

"Attach to Process" oder ähnlich heisst das feature.
 
Nö, auch HKLM\...\Run wird erst nach der Anmeldung gestartet. Lediglich bei allen usern, anstatt nur beim aktuellen wie unter HKCU.

Die Rechte sind die des angemeldeten Benutzers.

Vor der Anmeldung können lediglich services starten.
 
Kann es sein das AddLog("WIR WURDEN GESTARTET\r\n"); den alten Dateieintrag einfach überschreibt? Und du nur deshalb keinen neuen Eintrag siehst? Wäre für mich jedenfalls eine logische Erklärung wenn das Programm wie du sagst sonst richtig läuft.
 
@cr:
nein, hab extra gesagt, dass eine zeile hinzugefügt wird ;-) die datei wird mit fopen("bla.txt","a+"); geöffnet...

@nazgul:
wie kann ich n prozess der schon läuft (wie schon gesagt, wenn ich das programm ausführe gehts perfekt, wenns durch die registry gestartet wird net), debuggen? geht das denn, dass ich nen laufenden prozess in den debugger reinkrieg?
 
Ich denke entweder du findest den Fehler selber oder du lässt uns mehr Informationen zukommen. Das Schnipsel Code dient ja zur groben Orientierung, aber es können sich ja überall noch Fehler einwickeln. Bis jetzt schaut alles jedoch fehlerfrei. Vielleicht liegt es auch garnicht am Code. Ich habe auch ein CPP-File das vom Ablauf die gleiche Struktur aufweist und es funktioniert einwandtfrei.
Wenn du uns sagst, dass dein 4-Zylinder nicht funktioniert können wir auch nicht riechen, dass dort die Benzinpumpe spuckt.

Und noch eine Frage:

exit(1); return 1;

Never-reachable-Code?
 
also das return 1; ist einfach nur... hm ka... ich denke mal das hab ich zur ordentlichkeit dahingeschrieben ;-)

du meinst das es vielleicht auch nicht am code liegt, woran könnte es denn dann liegen?

ich bin mir nämlich auch ziemlich sicher, dass es nicht am code liegt, da der code schon funktionierte (auch nach einem neustart).



also ich habe das programm jetzt mal komplett auskommentiert, jetzt sieht das ganze so aus:
Code:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow )
{	
                    AddDebugLog("WIR WURDEN GESTARTET\r\n");
                    Sleep(100000);
                    return 123;
}

nun habe ich manuell unter HEKY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Windows\CurrentVersion\Run eine zeichenfolge namens "test" mit dem pfad zum programm angelegt.

starte ich das programm manuell wird in der datei "debug.txt" oben genannte zeile hinzugefügt.
starte ich meinen pc neu, passiert nichts, außer, dass das programm im taskmanager "läuft".

ich habe wirklich keine ahnung was da das problem sein soll. ich meine, ich habe das programm jetzt aufs simpelste reduziert und trotzdem läuft es nur wenn ich es persönlich auführe?!?!?! was ist denn da los?

hier ist das programm (gerart), vielleicht kann mir ja jem schildern was bei ihm passiert.
also ob es auch nur geht wenn man es selbst ausführt, oder ob es nach jedem neustart eine neue zeile in die debug.txt hinzufügt.

greetz
 
Zurück
Oben