Отключение какой-либо возможности для выхода из программного обеспечения? - PullRequest
2 голосов
/ 18 октября 2011

Я внедряю программное обеспечение для университетских экзаменов в C++ и хочу, чтобы любой человек не смог закрыть его после запуска. Цель состоит в том, чтобы запретить пользователю копировать программное обеспечение, печатать экран и сохранять его, а также в других целях!

Сначала я думал о способе отключения ctrl - alt - del , alt + F4 , alt + tab и другие комбинации клавиш, но, очевидно, следовать этому подходу не так просто, особенно в версиях после windows xp.

Как вы думаете, жизнеспособный подход к решению моей проблемы?

Ответы [ 3 ]

5 голосов
/ 18 октября 2011

Конечно, вы должны предпринять все обычные шаги, чтобы заставить ваше приложение отказываться закрываться само по себе (возможно, если не указан пароль), поэтому мы говорим только о том, что «я не хочу позволять кому-либо принудительно закрывать»it "part.

Одним из решений было бы сделать ваше приложение оболочкой Windows.

Другим решением было бы настроить компьютер таким образом, чтобы вошедший в систему пользователь не имел разрешения на закрытие.Ваше приложение закрыто.

И последнее решение, которое представляет собой грязный, официально не поддерживаемый хак, о котором вы не слышали от меня, заключается в следующем:

public static class Utility
{
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern void RtlSetProcessIsCritical(UInt32 v1, UInt32 v2, UInt32 v3);

    public static void BsodIfProcessEnds()
    {
        Process.EnterDebugMode();
        RtlSetProcessIsCritical(1, 0, 0);
    }

    public static void NoFireworksIfProcessEnds()
    {
        RtlSetProcessIsCritical(0, 0, 0);
    }
}

Предупреждение: BsodIfProcessEnds делает именно то, что говорит на банке.

3 голосов
/ 18 октября 2011

Предоставьте пользователям только ограниченную учетную запись на компьютере и не предоставляйте им разрешения на уничтожение вашего приложения.

Сделайте то же самое для других ограничений, и вам даже не нужно писать приложение.

Если вы хотите, чтобы пользователи запускались от имени администратора, то то, что вы запрашиваете, невозможно.

0 голосов
/ 21 сентября 2013

Вы можете создать два приложения. Один постоянно проверяет, работает ли ваше приложение Если он не запущен, запустите его, это может быть услуга (сложнее обнаружить для простых пользователей).

Вы можете также повеселиться с разрешением NTFS. Например, создайте верхний каталог, в котором у пользователя нет никаких разрешений (даже не просматривая его содержимое), затем создайте в нем папку, в которой у пользователя есть права на чтение. Если пользователь не знает хорошего пользователя, найти ваше приложение будет немного сложнее.

Но все же он мог запустить диспетчер задач, но, возможно, есть политика против этого. Говоря об этом, с помощью политик вы можете сделать его настолько ограниченным, что ему будет разрешено запускать только ваше приложение, а не любое другое приложение (поэтому он не сможет скопировать его или использовать компьютер для чего-либо другого, кроме вашего приложения.

...