Releases: marakaybo/FocusLock
Release list
FocusLock 0.1.2
Починка. Автозапуск не включался ни в одной версии, а защита правил,
добавленная в неопубликованную 0.1.1, запирала движок от его же файлов.
Обновиться стоит всем, кто ставил 0.1.0.
Автозапуск не включался вовсе
Если приложение стоит в папке с пробелом в имени — то есть в Program Files, куда его и ставит установщик, — задание в Планировщике не
создавалось никогда.
schtasks /TR принимает программу и её аргументы одной строкой, поэтому
путь приходилось брать в кавычки внутри аргумента. Windows PowerShell
5.1, передавая такой аргумент программе, кавычки внутри не экранирует: до
schtasks доезжали два аргумента — C:\Program и остаток. Снаружи это
выглядело так: мелькнуло окно PowerShell, переключатель сам вернулся
в «выключено», объяснений нет. На машине разработчика, где приложение
лежит в папке без пробела, всё работало.
Теперь задание создаётся из XML, где путь и аргументы — разные элементы,
и склеивать нечего. Заодно ушли ещё два тихих отказа: Планировщик по
умолчанию останавливает такое задание через трое суток работы и не
запускает его на батарее — для сторожа, который должен работать всегда,
это значит, что на ноутбуке без розетки блокировки просто не включались бы.
Код возврата schtasks теперь проверяется. Отклонённый UAC и «Планировщик
не принял задание» — разные события, и оба доходят до человека текстом,
а не отскоком переключателя.
Жёсткий сценарий нельзя было снять никогда
Прямое следствие предыдущего, и куда заметнее его.
Права на защищённую папку guard расставлялись до создания задания.
Отказ schtasks оставлял на машине закрытую папку без движка
с повышением — единственного, кто имеет право в неё писать. Дальше движок
не мог сохранить теневую копию, молча, и следующий такт читал с диска
«запроса на снятие не было» и ставил отметку заново. Отсчёт до снятия
вечно начинался с пятнадцати минут: цифры шли вниз секунду-две
и возвращались к началу. То есть жёсткий сценарий не снимался вообще
никогда, сколько ни жди.
Отметка о запросе теперь держится ещё и в памяти движка, так что отсчёт
идёт, даже если записать её не удалось. Подделать её снаружи нельзя — её
ставит сам движок по своим часам. Права на guard ставятся только после
того, как задания созданы; если создать не удалось, папка открывается
обратно.
Там же молча терялся расход за сутки — дневные лимиты обнулялись при
каждом запуске приложения. Об отказе записи теперь пишется в журнал,
и окно показывает предупреждение вместе с тем, что делать.
Отказы, о которых никто не узнавал
- Файл с меткой порядка байтов разбирался как битый, а битый файл каждый
читающий молча заменял значениями по умолчанию — то естьconfig.json,
однажды сохранённый редактором с меткой, выглядел как «все сценарии
выключились сами». - Импорт, экспорт, пауза и «запросить снятие» показывают причину отказа.
Раньше исключение пропадало в никуда, и кнопка выглядела неработающей —
особенно обидно на «запросить снятие»: диалог закрывался как при успехе,
а правда выяснялась через пятнадцать минут. - Версия в подвале настроек берётся из
package.json, а не вписана руками. rust-versionприведён к правде: заявлено было 1.77, код требует 1.82.
Установка
Скачайте FocusLock_0.1.2_x64-setup.exe и запустите. Установщик не
подписан, поэтому SmartScreen предложит подумать — «Подробнее» →
«Выполнить в любом случае».
После установки один раз включите «Запускать при входе в Windows»
в настройках: это создаёт задания в Планировщике и заодно чинит права на
папке данных, если предыдущая попытка оставила их закрытыми.
Подробности и то, что менялось раньше, — в
CHANGELOG.md.
FocusLock 0.1.0
Первая версия. Блокировщик отвлекающих приложений для Windows: живёт в трее, по расписанию и дневным лимитам закрывает выбранные программы и не даёт запустить их снова.
Что внутри
- Сценарии — что закрывать, в какие дни, в какие часы, сколько минут в сутки. Несколько работают одновременно, ограничения складываются.
- Жёсткие сценарии нельзя выключить в момент слабости: снятие принимается сразу, а срабатывает через заданную задержку.
- Свои приложения выбираются из списка запущенных процессов по тому имени, которое видно на экране: War Thunder, а не
aces.exe. Ограничить можно конкретную игру, а не весь лаунчер. - Помодоро, который на рабочих отрезках закрывает отвлекающее тем же механизмом, что и расписание.
- Статистика по дням: расход, пресечённые запуски, серия дней без превышений.
- Всё локально: ни аккаунтов, ни сети, ни телеметрии.
Установка
Скачайте FocusLock_0.1.0_x64-setup.exe и запустите. Поставить можно для себя или для всех пользователей — установщик спросит.
Windows будет ругаться. Установщик не подписан сертификатом, а приложение принудительно завершает процессы и создаёт задания в Планировщике — для SmartScreen это набор признаков вредоносной программы. Нажмите «Подробнее» → «Выполнить в любом случае». Либо соберите из исходников сами: код открыт целиком.
Приложению нужны права администратора: без них не закрыть программы, запущенные с повышением. Если прав нет, интерфейс говорит об этом прямо, а не делает вид, что защита работает.
Чего пока нет
Блокировки сайтов. Всё, что открывается в браузере, не ограничено ничем.
Обход в принципе возможен: администратор своей машины может удалить задания Планировщика или снести файлы состояния. Смысл защиты в другом — чтобы обход требовал осознанных многошаговых действий, а не одного клика в минуту слабости.