Schließen eines Programmes verhindern

Hallo,

ich sitze schon wahnsinnig lange vor dem Problem,
dass ich nicht weiß, wie ich das unberechtigte beenden
eines Programmes in C# verhindern kann.

Ich möchte eine Software schreiben, die zu einer bestimmten zeit/ nach einem bestimmten Zeitintervall/ nach einem bestimmten Ereignis verschiedene Windows-Aktionen auslösen kann.
Es soll zum Beispiel eine erweiterte Jugendschutz-Funktion integriert werden, die verhindert, dass der Computer länger als 3 Stunden täglich läuft.

Also kann man als Administrator über das Programm die gewünschten Einstellungen vornehmen und das Programm mit einem Passwort sperren.
Meldet sich ein anderer Benutzer an, wird das Programm im Hintergrund aktiv und überprüft die zu kontrollierenden Aktivitäten.

Problem: Das Programm verhindert zwar, dass es über konventionelle Wege geschlossen werden kann (Schließen-Befehl deaktiviert, Alt-F4 abgefangen), jedoch kann der Prozess einfach über den Task-Manager etc. gekillt werden (natürlich darf Windoes es auch beim Herunterfahren beenden).

Wie kann man das verhindern?

Hallo,

Wie kann man das verhindern?

Solange der Anwender mit Admin-Rechten sich einloggt, kannst du nichts verhindern. Auch wenn du dem Admin bestimmte Rechte auf Registry, Verzeichnisse und Dateien entziehst, kann er sich die immer wieder holen.

Ein wenig verhindern kann man wenn der Rechner in einer AD hängt- wenn er denn mit dieser auch verbunden ist.

Gruss
Joey

Eine Möglichkeit wäre eventuell Folgende:

Das Programm schaut beim Start per Process.GetProcesses alls Prozesse durch und prüft deren Process.MainModule.FileNames ab und zählt, wie oft das Programm „sich selbst“ dabei findet.
Wenn 1x, dann:

  • eine zweite Instanz von sich selbst starten
    Wenn 2x, dann:
  • Me.Invisible = True (dies träfe auf die zweite (von der ersten) gestartet Instanz zu)
    Wenn mehr, dann:
  • Me.Close (damit es nur zwei Instanzen sein können)

Dann braucht das Programm einen Timer, der einfach prüft: sind weiterhin zwei Instanzen vorhanden? Wenn nicht, dann starte eine.

Auf diesem Weg ist es gegeben, daß es fast unmöglich ist, den Prozess zu beenden.

Hallo,
danke für die Antwort.
Eine ähnliche Idee hatte ich auch mal gehabt, dass Problem dabei ist aber folgendes:

Startet das Programm sich selbst erneut (als 2. Instanz) wird sofort von Windows eine Prozessstruktur erstellt und die neue Instanz der alten untergeordnet.
Geht man jetzt in den Taskmanager und drückt bei einem Prozess „Prozessstruktur beenden“ werden zeitgleich(!) beide Prozesse beendet und das Programm ist vollständig von der Bildfläche verschwunden.

Dieses Thema hab ich hier so ähnlich schon mal vor ein oder 2 Jahren diskutiert, vielleicht gibt es dazu ja noch ein paar Antworten, wo du das nachlesen kannst.

Mit freundlichen Grüßen,
Bluesky787

Hallo!

Ich hatte die Artikel hier am Rande mitgelesen und eigentlich angenommen, dass die Message von Joey angekommen sei:
Wenn der Anwender sich mit administrativen Rechten anmelden kann, dann hast Du keine Chance. Punkt.

Einzige wirkliche Möglichkeit: Die Kids bekommen ein Konto mit eingeschränkten Rechten und Du lässt das Programm als Dienst unter einem Konto laufen, das mehr Rechte hat (bspw. LocalSystem o.ä. - je nach Anforderung).
Dann können die Kids zwar den Taskmanager aufrufen (oder auch irgend ein anderes Programm, das die gleichen oder ähnlichen Funktionalitäten anbietet), aber Windows verhindert dann, dass der Prozess, der mit höheren Berechtigungen läuft, von einem Anwender mit niedrigeren Rechten beendet wird.

Das ist die einzige (!) sichere Lösung, alles andere ist Murks, der sich aushebeln lässt.

Gruß,
Martin