Alternative zu RunOnce

Von: , Frage gestellt am Fr, 26. Aug 2005

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

3 Antworten zu dieser Frage

  1. Antwort von nach 8 Minuten 2 hilfreich
    Re: Alternative zu RunOnce

    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)

    • Antwort von nach einer Stunde 2 hilfreich
      Re^2: Alternative zu RunOnce

      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.

      • Antwort von nach 3 Stunden 1 hilfreich
        Re^3: Alternative zu RunOnce

        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 RegOpenKeyEx() 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)

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!