Введение
В операционных системах Windows 7 и 10 пользователи могут закрывать запущенные программы посредством ручного завершения процесса. Однако, в некоторых случаях, разработчикам программ может потребоваться запретить закрытие программы пользователем, чтобы избежать потери данных или повреждения программных файлов. В этой статье мы рассмотрим несколько способов защиты программ от закрытия пользователем в операционных системах Windows 7 и 10.
Способы защиты программ от закрытия
1. Использование системных политик
Один из способов защиты программ от закрытия пользователем состоит в использовании системных политик. Для этого требуется открыть локальную политику безопасности и внести соответствующие изменения. Для пользователей Windows 7 необходимо выполнить следующие шаги:
- Нажмите «Win+R», введите «gpedit.msc» и нажмите «Enter».
- В левой части окна откройте «Конфигурация компьютера» -> «Шаблоны административных шаблонов» -> «Система».
- Найдите опцию «Отключить Диспетчер задач» и дважды щелкните по ней. Установите значение «Включено».
- Нажмите «OK» и закройте окно локальной политики безопасности.
Для пользователей Windows 10 необходимо выполнить следующие шаги:
- Нажмите «Win+R», введите «gpedit.msc» и нажмите «Enter».
- В левой части окна откройте «Конфигурация компьютера» -> «Административные шаблоны» -> «Система».
- Найдите опцию «Отключить Диспетчер задач» и дважды щелкните по ней. Установите значение «Включено».
- Нажмите «OK» и закройте окно локальной политики безопасности.
Этот метод целиком запрещает доступ пользователя к Диспетчеру задач, в том числе для завершения процессов. Однако, этот способ может быть неоптимальным, если пользователю требуется доступ к другим функциям, которые также могут быть недоступны из-за отключения Диспетчера задач.
2. Использование кода
Более гибким методом защиты программы от закрытия является использование кода внутри программы. Конкретный код будет зависеть от языка программирования, который использовался для создания программы. Однако, обычно разработчики используют функцию обработки события закрытия окна для остановки процесса закрытия программы. Для примера используем язык программирования C#:
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
}
}
Этот код отменяет событие закрытия формы, если оно было вызвано пользователем (CloseReason.UserClosing). Это позволяет программе сохранить данные и/или вывести диалоговое окно для подтверждения выхода.
3. Использование стороннего ПО
Существуют сторонние программы, предназначенные для защиты программ от закрытия пользователем. Примерами таких программ являются «AlwaysUp» и «FireDaemon». Они могут быть установлены в качестве служб Windows и автоматически перезапускаться в случае их завершения.
Заключение
Существует несколько способов защиты программ от закрытия пользователем в Windows 7 и 10. Некоторые из них могут быть неоптимальными в зависимости от требований программы и пользовательских нужд. Разработчики программ должны тщательно оценить свой выбор, чтобы обеспечить наилучшую защиту программы от нежелательного закрытия пользователем.
Я уже задавал этот вопрос недавно, мне посоветовали запустить программу из-под другого пользователя. Якобы у него не будет прав закрывать программы запущенные из под администратора. Я создал задачу в Планировщике заданий.
Код задачи
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2015-01-27T18:30:34</Date>
<Author>Pete</Author>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<StartBoundary>2015-01-27T18:30:00</StartBoundary>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>WIN-H9OUVR61LNP\testUser</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"c:\Users\user\Documents\Visual Studio 2012\Projects\WorkersController\WorkersController\bin\Debug\WorkersController.exe"</Command>
</Exec>
</Actions>
</Task>
Разве что задача запускается из-под текущего пользователя testUser(обычный пользователь), по другому программа просто не запускалась.
Ну и эту программу пользователь спокойно убивает в диспетчере задач. Даже если зайти за учетку пользователя и запустить её от имени администратора (shift+rClick->Запустить от имени другого пользователя) мою программу, то пользователь всё равно может убить процесс.
Я не хочу отбирать у пользователя возможность вызывать диспетчер задач, блокировать нажатия alt+f4 перехватывать системые вызовы итд… итп… Можно ли «по простому» запретить пользователю закрывать программы ?
В Windows 10 есть возможность запретить закрытие программы пользователем. Это может быть полезно в случае, если в программе работает важный процесс, который должен завершаться корректно. В этой статье мы подробно рассмотрим, как запретить закрытие программы в Windows 10.
Шаг 1. Откройте редактор реестра.
Чтобы запретить закрытие программы, необходимо открыть редактор реестра. Нажмите на клавиши Win+R на вашей клавиатуре, чтобы открыть окно «Запустить». Введите команду regedit и нажмите Enter.
Шаг 2. Перейдите в раздел реестра.
Перейдите в раздел реестра, который отвечает за настройки системы. Для этого откройте «Компьютер», найдите папку HKEY_CURRENT_USER, раскройте ее и перейдите в раздел Software\Microsoft\Windows\CurrentVersion\Policies.
Шаг 3. Создайте новый параметр.
Создайте новый параметр, для этого нажмите правой кнопкой мыши на свободном месте в правой части окна редактора реестра и выберите пункт «Создать» -> «Параметр DWORD». Назовите его «NoClose».
Шаг 4. Установите значение параметра.
Установите значение параметра NoClose в 1, чтобы запретить закрытие программы. Для этого дважды кликните мышью на параметре NoClose, введите значение 1 в поле «Данные значения» и нажмите «OK».
Шаг 5. Закройте редактор реестра.
Закройте редактор реестра и перезагрузите компьютер, чтобы изменения вступили в силу.
Советы:
— Чтобы снять запрет на закрытие программы, откройте редактор реестра, найдите параметр NoClose и установите его значение в 0.
— Обязательно сделайте резервное копирование реестра перед внесением изменений. Любое неосторожное действие в редакторе реестра может привести к непредвиденным последствиям для работы компьютера.
#RequireAdmin
#include <WindowsConstants.au3>
#include <HotKey.au3>;http://autoit-script.ru/index.php/topic,296.0.html
#include <vkConstants.au3>
#include <GuiMenu.au3>
If Not IsAdmin() Then
MsgBox(16, 'Error', 'Вы не админ, до свидания')
Exit
EndIf
Opt('WinWaitDelay', 0)
_HotKeyAssign(BitOR($CK_ALT, $CK_SHIFT, $CK_CONTROL, $VK_INSERT), '_Quit') ;Alt+Shift+Ctrl+Insert
_HotKeyAssign(BitOR($CK_ALT, $VK_F4), '_Fig_Vam', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL))
_HotKeyAssign(BitOR($CK_WIN, $VK_D), '_Fig_Vam', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL))
_HotKeyAssign(BitOR($CK_WIN, $VK_M), '_Fig_Vam', BitOR($HK_FLAG_DEFAULT, $HK_FLAG_EXTENDEDCALL))
RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System', 'DisableTaskMgr', 'REG_DWORD', '1')
RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System', 'DisableRegistryTools', 'REG_DWORD', '1')
Run(@WindowsDir & '\notepad.exe')
$hWindow = WinWait('[REGEXPCLASS:Notepad.*]', '', 3)
If Not $hWindow Then Exit
WinSetState($hWindow, '', @SW_MAXIMIZE)
_WinSetStyle($hWindow, -1, $WS_EX_TOOLWINDOW)
$hMenu = _GUICtrlMenu_GetSystemMenu($hWindow)
_GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 1, False)
While 1
Sleep(10)
WEnd
Func _Quit()
_WinSetStyle($hWindow, BitOR($WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
_GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 0, False)
WinSetState($hWindow, '', @SW_RESTORE)
RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System', 'DisableTaskMgr', 'REG_DWORD', '0')
RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System', 'DisableRegistryTools', 'REG_DWORD', '0')
Exit
EndFunc ;==>_Quit
Func _Fig_Vam($iKey)
MsgBox(16, 'Error', 'Нельзя')
EndFunc ;==>_Fig_Vam
Func _WinSetStyle($hWnd, $nStyle = -1, $nExStyle = 0)
Local Const $GWL_STYLE = -16, $GWL_EXSTYLE = -20
Local Const $SWP_NOMOVE = 0x2, $SWP_NOSIZE = 0x1, $SWP_SHOWWINDOW = 0x40, $SWP_NOZORDER = 0x4
Local $iFlags = BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOMOVE, $SWP_NOZORDER)
If $nStyle = -1 Then $nStyle = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
DllCall('User32.dll', 'int', 'SetWindowLong', 'hwnd', $hWnd, 'int', $GWL_STYLE, 'int', $nStyle)
DllCall('User32.dll', 'int', 'SetWindowLong', 'hwnd', $hWnd, 'int', $GWL_EXSTYLE, 'int', $nExStyle)
DllCall('User32.dll', 'int', 'SetWindowPos', 'hwnd', $hWnd, 'hwnd', 0, 'int', 0, 'int', 0, 'int', 0, 'int', 0, 'int', $iFlags)
EndFunc ;==>_WinSetStyle
- Remove From My Forums
Как установить запрет на закрытие приложения
-
Вопрос
-
Программа должна запускаться в автозапуске. Но появление ее окна при этом нежелательно. Устроят два варианта:
1. Запрет на раскрытие окна при автозапуске (только значок в трее, через еоторый можно впоследствии в нужный момент открыть окно).
2. Либо чтобы закрытие окна крестиком приводило не к закрытию окна, а к его сворачиванию (желательно в трей, не на панель задач).
Если есть решение задачи, то прошу подсказать.
Ответы
-
Сегодня все работает. И опция «Запускать в свернутом виде» и Ваш батник! Видно комп в пятницу уже устал за неделю. Еще раз спасибо за отзывчивость!
ну вот) удачи. Не забывайте отмечать в качестве ответа, что бы тема была закрыта
-
Изменено
24 сентября 2018 г. 9:42
-
Помечено в качестве ответа
Anton Sashev Ivanov
3 октября 2018 г. 5:52
-
Изменено
-
Сегодня все работает. И опция «Запускать в свернутом виде» и Ваш батник! Видно комп в пятницу уже устал за неделю. Еще раз спасибо за отзывчивость!
-
Помечено в качестве ответа
Anton Sashev Ivanov
3 октября 2018 г. 5:52
-
Помечено в качестве ответа
-
-
Помечено в качестве ответа
Anton Sashev Ivanov
3 октября 2018 г. 5:52
-
Помечено в качестве ответа