Непрерывный процесс Windows - PullRequest
2 голосов
/ 10 марта 2010

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

Это приложение контролирует интерфейс USB. Мы будем периодически использовать WMI для запроса устройства.

Клиент хочет запустить приложение в операционной системе Windows XP и не любит устанавливать .NET. Таким образом, мы выбрали Visual Basic 6 в качестве нашего языка.

Моя главная проблема - это приложение не может быть прекращено. Наш консультант по проектам говорит об Антивирусе, и да, некоторые антивирусы не могут быть прекращены. Я думал, как сделать то же самое в Visual Basic 6. Я знаю, что в проекте будет задействован API, но куда мне идти? так что со мной все в порядке.

Я видел несколько статей, в которых EXE-файл конвертируется в SERVICE, создается служба Windows в Visual Basic 6 и т. Д.

Так что, пожалуйста .. поделитесь своими мыслями.

Ответы [ 5 ]

2 голосов
/ 10 марта 2010

Если вы хотите быть злым, вы можете вызвать (официально) недокументированную функцию RtlSetProcessIsCritical NTDLL. Это немедленно BSOD машина, если ваш процесс завершается.

2 голосов
/ 10 марта 2010

Вы не можете создать процесс, который не может быть завершен без какого-либо перехвата режима ядра, который включает в себя написание драйвера. Возможно, вы захотите взглянуть на руткиты: подрыв ядра Windows , если вы заинтересованы в этом. Однако даже при перехвате режима ядра все еще существует множество способов завершить процессы. Альтернативой является использование перехвата в пользовательском режиме, его легко обойти, но этого достаточно для очень простых проектов.

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

0 голосов
/ 13 марта 2010

Если честно, вы пытаетесь сделать что-то в VB6, что на самом деле не так уж хорошо. Когда вы говорите «не может быть прекращено» - что вы подразумеваете под этим? Там есть несколько уровней: a) Приложение показывает окно, но пользователь не может закрыть его кнопкой X, или оно не показывает его б) Приложение не показывает окна или, возможно, сидит в панели задач c) Приложение не отображает окна и не может быть закрыто на вкладке Приложения в диспетчере задач d) Приложение не может быть закрыто из списка процессов диспетчера задач

(a) и (b), вероятно, проще всего сделать в прямом VB. (в) все еще возможно, но становится все хуже. (d) приведет вас на хакерскую территорию и почти наверняка встретит вас, если вам это удастся.

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

0 голосов
/ 11 марта 2010

Это действительно расстраивает кодирование в VB6 прямо сейчас, особенно я бросил свою голову в C # в течение 2 лет, хотя я кодировал в VB6 в течение 5 лет

Возвращение назад - это боль, как будто я начинаю новый язык программирования.

0 голосов
/ 10 марта 2010

Я думаю, что вы хотите посмотреть на написание NT Service.

Подробнее здесь: http://www.montgomerysoftware.com/CreatinganNTServiceinVisualBasic6/tabid/161/language/en-US/Default.aspx текст ссылки

...