c # - Forhindre brugere fra at afslutte et Windows-program via system hurtigtaster

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har arbejdet på en til/cash-register ansøgning. Vi skal forhindre brugerne i at afslutte applikationen ved at bruge Alt + Esc, Ctrl + Alt + Del eller Alt + Tab etc kombinationer og vi vil give en separat brugerdefineret genvejstast for at afslutte. Ansøgningen vil være fuldskærm og uden nogen nær knap. Jeg har allerede gjort fuldskærms-no-krydsknappen, men fast ved at deaktivere genvejstasterne på lavt systemniveau. Hvordan gør jeg dette i C #? Enhver hjælp eller alternative metoder (dvs. opsætning af brugergruppetilladelser for at forhindre stjernemenu/task manager eller ethvert andet alternativ til at nå målet) er værdsat.


Rediger: Vi bruger WinForms. Programmet kører i Windows XP/Vista/7.

Bedste reference


Der er ingen direkte måde at undslippe fra Windows 'standardadfærd. En bruger af Windows skal have mulighed for at dræbe applikationer. Hvis applikationen ikke overholder, vil systemet tvinge programmet til at dræbe.


Der er dog nogle få tricks, ofte ansat af virusforfattere, her er nogle (ikke omfattende):



  • At tillade alle system hurtigtaster er relativt trivielt, men Ctrl-Alt-Del er ikke blandt dem. Kig på denne fremragende kodeprojektartikel med en prøveapplikation.

  • Byg en DLL og injicer dig selv i andre processer, der er afgørende for systemet. Nem at gøre, men sørg for at du sender din ansøgning fra .NET til standalone C ++ eller et andet sprog, du vil ikke have systemprocesser afhængige af den version af. NET, der du indlæser.

  • I stedet for dll-forslaget kan du oprette noget som en shell-udvidelse med et bibliotek som dette, som giver dig mulighed for at fortsætte med at bruge .NET. Det er ikke beregnet til denne slags ting, men det tvinger brugeren til at dræbe explorer.exe for at slippe af med din ansøgning.

  • Opret en tjeneste, der kan interagere med skrivebordet. Begræns tjenestens rettigheder med normale midler, hvilket i det væsentlige har den samme virkning, at de ikke tillader brugere at dræbe din app via de måder du nævner.

  • Du skal selvfølgelig annullere enhver WM\_CLOSE, WM\_EXIT eller WM\_KILL besked, og fortsæt simpelthen med 'living'.

  • Brug en sentinel-applikation, det er det, som de fleste virusscannere anvender: hvis du dræber en proces, genindsætter sentinelet det. Hvis du dræber sentinel, skal den genstartes af hovedappen. Dårlig opførsel, men fungerer.



Men generelt råd: Gør det ikke. Tillad dine brugere at potentielt dræbe programmet, hvis det er nødvendigt, ellers vil det være meget svært at gøre vedligeholdelse. Den eneste 'understøttede' måde er gennem tjenester, hvor du kan tillade særlige brugere at stop din tjeneste, og den kan ikke stoppes gennem opgaveadministratoren. [5] [6]