Programm beenden verhindern



  • Hallo Forum!

    Ich schreibe gerade ein Programm, das meinen Rechner vor unerlaubtem Zugriff schützen soll
    (Abfrage von Passwort & Autorisierungsschlüssel). Dabei soll es natürlich nicht passieren,
    dass jemand das Programm einfach beendet. Ich versuche genau das durch folgendes zu verhindern:

    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    if (!verif)  //Wenn Passwort falsch
            {
            String com;
            com = "start " + ParamStr(0);
            system(com.c_str());       //Programm neu starten
            }
    }
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    man = FindWindow(NULL, "Windows Task-Manager");
    if(man)
    SendMessage(man,WM_CLOSE,0,0);  //TaskManager immer wieder beenden
    }
    
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
            DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);
            dwExStyle |= WS_EX_TOOLWINDOW;
            SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);  //Programm wird nicht in der Taskleiste angezeigt
    
            try //usw...
    
    protected:
    void __fastcall CreateParams(TCreateParams &Params)
        {        
         TForm::CreateParams(Params);
         Params.WindowClass.style |=CS_NOCLOSE; //Kein Schließen-Kreuz
        }
    

    Nun meine Frage:
    Wie könnte man das Programm sonst noch "illegal" schließen
    und was kann man dagegen tun?

    MfG Chris_



  • Wenn irgendein Programm meinem Taskmanager beendet, wäre ich nicht sonderlich begeistert; selbst in dieser Situation. 😉

    Schau Dir mal TForm::OnClose an.

    Warum nutzt Du nicht TrueCrypt oder ähnliches?

    // Edit
    Imho kann man seit Win98 nicht mehr das Erscheinen des Taskmanagers verhindern; aber Dienste erkennt man nicht auf den ersten Blick... (aka wird Programm x beendet startet es Dienst y neu...)



  • Vielen Dank schonmal für die Hilfe!

    Rostfrei[] schrieb:

    Wenn irgendein Programm meinem Taskmanager beendet, wäre ich nicht sonderlich begeistert; selbst in dieser Situation. 😉

    Du sprichst hier von einem fremden Programm (Schadsoftware).
    Ich will ja nicht den TM eines Fremden beenden, sondern meinen TM,
    dadurch ist es denke ich auch keine Schadsoftware, sondern ein Schutz (kleiner Bruder usw. :))

    Rostfrei[] schrieb:

    Schau Dir mal TForm::OnClose an.

    Was meinst du damit? Stimmt die Abfrage nicht? Es funktioniert auf jeden fall so!

    MfG Chris_



  • ich glaube Rostfrei[] meinte eher OnCloseQuery

    [Edit]

    Chris_ schrieb:

    Rostfrei[] schrieb:

    Schau Dir mal TForm::OnClose an.

    Was meinst du damit? Stimmt die Abfrage nicht? Es funktioniert auf jeden fall so!

    wobei du hier nicht auf das Angebot der VCL zurückgreifst, denn die Variable TCloseAction &Action steht da nicht nur zum Spaß
    wenn du den Wert von Action auf caNone setzt wird das Programm/Formular nicht geschlossen



  • Danke Linnea,
    habs jetzt so gelöst, wie du gesagt hast!

    Nur ein Problem noch:
    Die Lösung mit dem Task-Manager schließen gefällt mir nicht wirklich.
    Am liebsten würde ich das Beenden des Prozesses durch den TM verhindern,
    geht das?
    Oder zumindest die Message dazu abfangen und den Prozess gleich neu starten?

    Habt mir jetzt schon sehr viel weiter geholfen, danke dafür!! 👍

    MfG Chris_



  • genau, onCloseQuery war gemeint...

    Dass das Programm via Taskmanager beendet wird, kannst Du imho nicht verhindern.

    Du könntest aber z.B. zwei Anwendungen parallel laufen lassen, die prüfen, ob das jeweils andere Programm noch läuft - falls nicht (da es beendet wurde) dann dies neu starten. Das ist aber definitiv auch nicht das ware, da auch das ohne weiteres ausgehebelt werden kann, aber evtl. ein wenig besser.

    Ich denke aber, dass ein Service die beste Wahl wäre.



  • Rostfrei[] schrieb:

    Ich denke aber, dass ein Service die beste Wahl wäre.

    Wollte den Tipp befolgen, hab also mal die BCB-Hilfe dazu befragt, da ich keine
    Erfahrung mit Diensten habe:

    1 Wählen Sie Datei / Neu / Weitere und doppelklicken Sie im Dialogfeld Objektgalerie auf den Eintrag Service-Anwendung.

    Leider Gibt es bei mir (BCB6 Personal) keinen Eintrag "Service-Anwendung"!?
    Was soll ich tun?

    MfG Chris



  • Wieso beenden sich die Service Andwendungen sofort wieder ?
    Ist das nicht recht sinnlos ???



  • einen Dienst kannst du nicht einfach so aus dem BCB heraus starten, der muß erst im System registriert/installiert werden, danach kann er gestartet werden
    in der Commandozeile zum Installieren:

    Laufwerk:Pfad\deindienst.exe /install
    

    in der Commandozeile zum Deinstallieren:

    Laufwerk:Pfad\deindienst.exe /uninstall
    

    [Edit]man kann Dienste generell sehr schlecht debuggen, irgendwo in der Hilfe sthet wies geht
    ich mach mir dann meist ein kleines Programm draus, also keinen Dienst und teste damit, wenn alles läuft wirds als Dienst gemacht und gestartet
    hierbei ist es z.B. sinnvoll alle nicht direkt zum Dienst gehörenden Dinge in ein Datamodul auszulagern, welches man dann relativ einfach in ein Testprogramm oder den Dienst einbinden kann



  • Wie aber kann man einen dienst erstellen?
    Das Installieren kommt ja erst danach ?!

    Linnea schrieb:

    wenn alles läuft wirds als Dienst gemacht und gestartet

    und wie wirds als dienst gemacht??

    MfG Chris_



  • mein Beitrag bezog sich hauptsächlich auf Tim06TRs Kommentar 😉

    bei meinem BCB6 Pro gibts "Service-Anwendung" und "Service" als Auswahl zur Diensterstellung, schau mal ob in deiner Hilfe was zu TService steht
    eine personal-Version hab ich leider nicht zum testen



  • Ich grab den nochmal aus und ich habe 2 Programme die sich gegenseitig am Laufen halten, jedoch ist da mit Prozessstruktur beenden schnell ende im Gelände und das ist inakzeptabel.
    Es werden leider keine Beendigungsprozesse beim Abschuss aufgerufen, sich selbst neustarten geht also auch nicht. Ist der Dienst die einzige verbleibende Möglichkeit ? (Ist mir wenn ich ehrlich bin zu kompliziert / umständlich)

    EDIT: Wie finde ich heraus ob Windows herunterfährt / fahren will, wenn das Prog blockt wär das ein GAU



  • Kannst dem Windows Account deines Bruder die Administratorrechte wegnehmen und deine Software mit Administratorrechten laufen lassen. Dann schützt Windows selbst deine Software vor dem unprivilegiertem Zugriff.



  • ÄHEM,
    1. TROLLPOST
    2. Bin nicht Threadstarter
    3. --- Suche womöglich nach vorhandener Lösung, die im Service zu finden ist ---

    Entschuldigt diese geistige Umnachtung



  • Was spricht dagegen die Benutzerverwaltung von Windows zu benutzen? Denn genau da für wurde sie gemacht. Versehe dein Konto mit einem Passwort und gut ist.


Anmelden zum Antworten