Alternative zu RunOnce

Abend,

Also ich folgendes „Problem“: Ich möchte ein Programm nach dem Start des Computers ausführen (nein kein Virus!). Ich hab das ganze mit Hilfe des Registry Eintrages HKEY_LOCAL_MACHINE\Software…\RunOnce auch hingekriegt. Leider wird aber während das Programm ausgeführt wird, Windows „unterbrochen“. Soll heissen weitere Prozesse können nicht geladen werden.
Nun meine Frage. Welche Alternative zu RunOnce gibt es denn, so dass Windows die restlichen Prozesse normal weiter abarbeitet während mein Programm in Ausführung ist?
PS: den Registry Eintrag Run wollte ich nicht nehmen, da das Programm nur einmal ausgeführt werden soll.

Grüsse aus der Schweiz
Ronny

Hallo Ronny,

Nun meine Frage. Welche Alternative zu RunOnce gibt es denn,
so dass Windows die restlichen Prozesse normal weiter
abarbeitet während mein Programm in Ausführung ist?
PS: den Registry Eintrag Run wollte ich nicht nehmen, da das
Programm nur einmal ausgeführt werden soll.

RunOnce ist dazu gedacht, nach einer Installation, wenn das System neu gebootet werden musste, einmalig diverse Einstellungen zu machen, deshalb versucht Windows auch konkurenzierende Prozesse nicht zuzulassen.

Du kannst ja Run verwenden oder den Autostart-Ordner und wenn das Programm alles erledigt hat, den Eintrag wieder löschen.

MfG Peter(TOO)

Hallo Peter,

danke für deine Antwort.
Ich hab mich also umentschieden und den Run Eintrag genommen.
Leider will sich der Eintrag nicht löschen lassen. Was hab ich falsch gemacht?

//Eintrag generieren
HKEY hkey;
char* path = „…\maxmem.exe -1“;
RegOpenKey(HKEY_LOCAL_MACHINE, „Software\Microsoft\Windows\CurrentVersion\Run“, &hkey);
RegSetValueEx(hkey, „maxmem“, 0, REG_SZ, (BYTE*)path, 100);
RegCloseKey(hkey);

//im weiteren Programmverlauf wird der Eintrag dann nach einem Neustart gelöscht
HKEY hkey;
RegOpenKey(HKEY_LOCAL_MACHINE, „Software\Microsoft\Windows\CurrentVersion\Run“, &hkey);
RegDeleteKey(hkey, „maxmem“);
RegCloseKey(hkey);

Das ganze ist in c++ geschrieben und die Berechtigungen habe ich alle.

Hallo Ronny,

danke für deine Antwort.
Ich hab mich also umentschieden und den Run Eintrag genommen.
Leider will sich der Eintrag nicht löschen lassen. Was hab ich
falsch gemacht?

RegOpenKey() sollte nur noch für Win 3.1 verwendet werden !
Du solltest RegOpenKey Ex () verwenden.

RegDeleteKey() gab es bei Win3.1 gar noch nicht. Das könnte dein Problem sein. Welche Fehlermeldung liefert denn RegDeleteKey() ??

> //im weiteren Programmverlauf wird der Eintrag dann nach einem Neustart gelöscht

HKEY hkey;
LPVOID lpMsgBuf;
RegOpenKey(HKEY\_LOCAL\_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
if (hkey)
 {
 FormatMessage( 
 FORMAT\_MESSAGE\_ALLOCATE\_BUFFER | 
 FORMAT\_MESSAGE\_FROM\_SYSTEM | 
 FORMAT\_MESSAGE\_IGNORE\_INSERTS,
 NULL,
 GetLastError(),
 MAKELANGID(LANG\_NEUTRAL, SUBLANG\_DEFAULT), // Default language
 (LPTSTR) &lpMsgBuf,
 0,
 NULL 
 );
 MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB\_OK | MB\_ICONINFORMATION );
 LocalFree( lpMsgBuf );
 }
else
 {
 RegDeleteKey(hkey, "maxmem");
 if (hkey)
 {
 FormatMessage( 
 FORMAT\_MESSAGE\_ALLOCATE\_BUFFER | 
 FORMAT\_MESSAGE\_FROM\_SYSTEM | 
 FORMAT\_MESSAGE\_IGNORE\_INSERTS,
 NULL,
 GetLastError(),
 MAKELANGID(LANG\_NEUTRAL, SUBLANG\_DEFAULT), // Default language
 (LPTSTR) &lpMsgBuf,
 0,
 NULL 
 );
 MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB\_OK | MB\_ICONINFORMATION );
 LocalFree( lpMsgBuf );
 }
 else
 }
RegCloseKey(hkey);

MfG peter(TOO)