Скрытие процесса из диспетчера задач

Мы разрабатываем программное обеспечение для хостинговой компании. Это программное обеспечение необходимо для блокировки/разблокировки компьютеров в зависимости от того, присутствует администратор физически или нет.

Мы используем RFID. Таким образом, пока программное обеспечение обнаруживает RFID администратора, система остается разблокированной. Как только администратор покидает помещение, программа автоматически блокирует компьютер. Пока админ снова не войдет в помещение.

Основная проблема в том, чтобы заставить это работать, приложение должно работать все время, и никто не должен иметь возможность закрыть приложение.

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


person Dr. Sahib    schedule 03.04.2014    source источник
comment
Сделайте его сервисом, он не будет отображаться в диспетчере задач.   -  person atoMerz    schedule 03.04.2014
comment
Сервисы @atoMerz появляются   -  person Sriram Sakthivel    schedule 03.04.2014
comment
@SriramSakthivel Это правда, но пользователь все равно не сможет убить его без достаточных привилегий, что и является настоящей целью здесь.   -  person Servy    schedule 03.04.2014
comment
@SriramSakthivel Они делают это, если вы нажмете кнопку / флажок «Показать процессы от всех пользователей». И требует административного доступа. Конечно, я думаю, что это работает только в ОС с включенным UAC.   -  person Steven V    schedule 03.04.2014
comment
Согласен с вами, ребята, но я думаю, что пользователь может перейти на вкладку служб, чтобы увидеть службу, я не уверен, сможет ли он ее остановить.   -  person Sriram Sakthivel    schedule 03.04.2014
comment
Не делайте этого на С#. Сделайте это с помощью собственных API-интерфейсов Windows, не задействуя другую среду выполнения, которую можно закрыть.   -  person George Stocker    schedule 03.04.2014
comment
@GeorgeStocker Не могли бы вы немного рассказать об этом? любой процесс можно убить обрядом? Не уверен, что понимаю тебя.   -  person Sriram Sakthivel    schedule 03.04.2014
comment
Это игра в кошки-мышки; на С# это сделать невозможно; но вы можете попробовать сделать это на С++, используя Win32 API. blogs.msdn.com/b/oldnewthing/archive/ 2004/02/16/73780.aspx   -  person George Stocker    schedule 03.04.2014


Ответы (1)


Короткий ответ: вы не можете предотвратить остановку запущенного процесса опытным пользователем. В лучшем случае вы можете сделать это трудным, но никогда невозможным.

Кроме того, вы никогда не должны разрабатывать программное обеспечение, думая, что оно никогда не будет прервано. Если это критический процесс, то вы должны спроектировать его таким образом, чтобы он мог восстановиться в случае внезапной остановки. В конце концов, сколько бы вы его ни защищали, он все равно не выдержит отключения электричества. :)

person Crono    schedule 03.04.2014
comment
-1 Иди попробуй убить аваст например! Даже администратор не может его убить. - person Sriram Sakthivel; 03.04.2014
comment
@SriramSakthivel Я не знаю avast, но уверен, что его можно остановить. - person Crono; 03.04.2014
comment
@SriramSakthivel Avast написан не на C#. - person George Stocker; 03.04.2014
comment
Нет, чувак, ты получишь access denied message. - person Sriram Sakthivel; 03.04.2014
comment
@GeorgeStocker Речь идет не о c# или vb.Net, а о подключении API TerminateWindow к kernel32.dll. что вы можете сделать это и в С# - person Sriram Sakthivel; 03.04.2014
comment
@SriramSakthivel Тот факт, что вы получаете сообщение об отказе в доступе при попытке завершить процесс через диспетчер задач, не делает процесс защищенным от уничтожения, что в основном и требует ОП. Если низкоуровневому процессу удается предотвратить уничтожение себя ТМ, другой низкоуровневый процесс вполне может это сделать. Итак, мой ответ таков: вы НЕ МОЖЕТЕ предотвратить уничтожение процесса, будь то из TM или где-либо еще. - person Crono; 03.04.2014