Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15
  1. #1
    Trojaner
    Registriert seit
    14.03.2007
    Beiträge
    87

    Standard C - Mehrfache Programmausführung verhindern

    Plattform: Windows NT
    Prozessor: Intel x86


    Wie kann ich mit native C realisieren, dass ein Programm welches bereits gestartet wurde beim nächsten Doppelklick nicht nochmals geladen wird.

    ----------
    Beispiel Szenario:

    programm.exe -> klick -> gestartet
    programm.exe -> klick -> nochmal gestartet
    (jetzt würde alles doppelt gemacht.)
    ----------


    Hab bereits etwas gesucht (Mutex, WinAPI), bin mir aber unsicher wie dies jetzt in C implementiert wird.

    Vielleicht kennt Ihr ne gute Referenz/Tutoriell oder habt ein passendes Codeschnipsel?
    Traue keiner Software die Du nicht selbst gecodet^^.

  2. #2
    CIH-Virus
    Registriert seit
    02.12.2007
    Beiträge
    420

    Standard

    ich hab nich soviuel ahnung von c++ also wie der codeschnippsel aussehen würde

    aber überprüf doch einfach in den prozessen ob der prozess von deinem programm schon läuft ;p
    [B] Website hilfe (sql,programmierung,etc)
    [B] RAT Hilfe
    [B] Dienstleistung allerlei art

    [S] Alles

    Zitat Zitat von User
    hi nochmal ..

    ok hast recht aber wie sucht man den bei sufu ...
    kenn mich net so aus ..

    danke noch fürs tip

  3. #3
    Trojaner
    Registriert seit
    14.03.2007
    Beiträge
    87

    Standard

    Naja, ist aber die PID, der Prozessname ist nicht eindeutig.
    Traue keiner Software die Du nicht selbst gecodet^^.

  4. #4
    Good Time W32.FunLove Avatar von Planxty
    Registriert seit
    22.01.2008
    Beiträge
    988

    Standard

    Zitat Zitat von YannicK
    aber überprüf doch einfach in den prozessen ob der prozess von deinem programm schon läuft ;p
    also ich beziehe es mal auf batch stell dir die vor:
    Code:
    :1
    tskill prog.exe
    goto1
    das würde den pc im hintergrund etwas aufhalten könnte ich mir vorstellen ^^

  5. #5
    CIH-Virus
    Registriert seit
    02.12.2007
    Beiträge
    420

    Standard

    Zitat Zitat von Planxty
    Zitat Zitat von YannicK
    aber überprüf doch einfach in den prozessen ob der prozess von deinem programm schon läuft ;p
    also ich beziehe es mal auf batch stell dir die vor:
    Code:
    :1
    tskill prog.exe
    goto1
    das würde den pc im hintergrund etwas aufhalten könnte ich mir vorstellen ^^
    Das würde doch nur das programm schliesen und wieder öffnen wens existiert? xD ist doch doof :<

    Also halt schauen ob der prozess läuft o_O und dan den code nicht ausführen
    [B] Website hilfe (sql,programmierung,etc)
    [B] RAT Hilfe
    [B] Dienstleistung allerlei art

    [S] Alles

    Zitat Zitat von User
    hi nochmal ..

    ok hast recht aber wie sucht man den bei sufu ...
    kenn mich net so aus ..

    danke noch fürs tip

  6. #6
    Trojaner
    Registriert seit
    14.03.2007
    Beiträge
    87

    Standard

    Ok, ich glaub Ihr versteht micht nicht ganz. Ich versuchs nochmal:

    Das Programm "programm.exe" wird gestartet. So, jetzt läuft's.
    Kommt jetzt jemans ausversehen oder warum auch immer nochmal auf die Idee programm.exe ein zweites mal zu starten, dann soll das Programm selbst erkenne, das es bereits läuft und sich beenden. Dazu wird kein tskill benötigt, sondern nur eine Prozedur/Methode welche checked, ob das Programm schon läuft - wenn ja:

    return 111;

    Nun, wie das mit Serialisation oder obs ne WinAPI Funktion (Windows = Nachrichtenbasiertes System - evtl. Nachricht an alle Prozesse mit Namen programm.exe - bist Du auch ich (dieses programm.exe)?) würd ich gern wissen.

    Ich schreib schonma nen Beispielprogramm, wo der entscheidende Teil eben fehlt:

    Code:
    #include <stdio.h>
    
    int main () {
    
    // läuft bereits eine Instanz von exakt diesem Programm
    // Programmnamen können ja mehrmals vorkommen (svchost.exe)
    
    if (INSTANZ) {
    return 111; // Ja, es gibt bereits ne Instanz
    }
    
    // ansonsten hier der Code der ausgeführt wird, wenn es das erste mal gestartet wird.
    
    
    return 0;
    }
    Traue keiner Software die Du nicht selbst gecodet^^.

  7. #7
    Good Time W32.FunLove Avatar von Planxty
    Registriert seit
    22.01.2008
    Beiträge
    988

    Standard

    oh sry stimm iwie schlafe ich wohhl schon halb^^ das prog darf ja einmal laufen^^
    ui ich hab nix gesagt :-[

  8. #8
    CIH-Virus
    Registriert seit
    02.12.2007
    Beiträge
    420

    Standard

    10sekunden google

    Code:
    //---------------------------------------------------------------------------
    void TForm1::GetProcessNames(TStrings* AList,DWORD ID)
    {
    if(AList)
    {
        char szProcessName[MAX_PATH] = "unknown";
        HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE,ID);
        if(hProcess)
           {
            HMODULE hMod;
            DWORD cbNeeded;
            if (EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) )
                GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName) );
           }
        AList->Add(String(szProcessName));
        CloseHandle(hProcess);
    }
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    RichEdit1->Lines->Clear();
    DWORD Processes[1024],size,count;
    if (EnumProcesses(Processes,sizeof(Processes),&size))
        for (int i=0;i<int(size/sizeof(DWORD));i++)
            GetProcessNames(RichEdit1->Lines,Processes[i]);
    }
    //---------------------------------------------------------------------------
    Quelle:

    http://www.c-plusplus.de/forum/viewt...-is-65076.html
    [B] Website hilfe (sql,programmierung,etc)
    [B] RAT Hilfe
    [B] Dienstleistung allerlei art

    [S] Alles

    Zitat Zitat von User
    hi nochmal ..

    ok hast recht aber wie sucht man den bei sufu ...
    kenn mich net so aus ..

    danke noch fürs tip

  9. #9
    Trojaner
    Registriert seit
    14.03.2007
    Beiträge
    87

    Standard

    Werd ich testen ...

    Gibt 1. Problem: C++

    Ich muss sagen, dass ich dringend an einer native C Lösung interessiert bin.
    Ich komm mit C++ nicht klar (besonders da ich bei msdn keine ALternative für C gefunden habe). Da muss es doch auch iwas geben?
    Traue keiner Software die Du nicht selbst gecodet^^.

  10. #10
    Gesperrt
    Registriert seit
    14.10.2008
    Beiträge
    27

    Standard

    Vielleicht einfach nen Reg eintrag anlegen und am Anfang auslesen , wenn er da ist. Programm beenden , wenn nicht fortfahren.

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •