Skip to content

Releases: marakaybo/FocusLock

FocusLock 0.1.2

Choose a tag to compare

@marakaybo marakaybo released this 11 Sep 07:47

Починка. Автозапуск не включался ни в одной версии, а защита правил,
добавленная в неопубликованную 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

Choose a tag to compare

@marakaybo marakaybo released this 30 Aug 11:57

Первая версия. Блокировщик отвлекающих приложений для Windows: живёт в трее, по расписанию и дневным лимитам закрывает выбранные программы и не даёт запустить их снова.

Что внутри

  • Сценарии — что закрывать, в какие дни, в какие часы, сколько минут в сутки. Несколько работают одновременно, ограничения складываются.
  • Жёсткие сценарии нельзя выключить в момент слабости: снятие принимается сразу, а срабатывает через заданную задержку.
  • Свои приложения выбираются из списка запущенных процессов по тому имени, которое видно на экране: War Thunder, а не aces.exe. Ограничить можно конкретную игру, а не весь лаунчер.
  • Помодоро, который на рабочих отрезках закрывает отвлекающее тем же механизмом, что и расписание.
  • Статистика по дням: расход, пресечённые запуски, серия дней без превышений.
  • Всё локально: ни аккаунтов, ни сети, ни телеметрии.

Установка

Скачайте FocusLock_0.1.0_x64-setup.exe и запустите. Поставить можно для себя или для всех пользователей — установщик спросит.

Windows будет ругаться. Установщик не подписан сертификатом, а приложение принудительно завершает процессы и создаёт задания в Планировщике — для SmartScreen это набор признаков вредоносной программы. Нажмите «Подробнее» → «Выполнить в любом случае». Либо соберите из исходников сами: код открыт целиком.

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

Чего пока нет

Блокировки сайтов. Всё, что открывается в браузере, не ограничено ничем.

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