Опубликовал вторую версию. Забыл сразу учесть, что sing-box поддерживает комментарии и лишние запятые в конфигурации. А моя программа использует класс для разбора json, который такого не понимает.
Почему не Karing? Потому что там очень много лишнего. Мне нужен простой чистый sing-box с конфигом, больше ничего. Единственная проблема, что запускать и переключать через условные bat-файлы слишком муторно. Не хватало только примитивного быстрого управления. И, судя по всему, многие тоже используют оригинал и мучаются со скриптами. Плюс родственникам и друзьям проще дать готовый архив с exe и конфигом, чем объяснять с картинками где куда нажимать, что где как настраивать.
Плюсую!
Всё что вы описываете - это как раз моя проблема. Мне не нужно ничего лишнего, просто голый бинарник + конфиги. Я даже задумывался написать себе нечто подобное на C++, но всё никак не хватало времени. А тут вы появились со своим готовым решением, прямо как палочка-выручалочка.
Большое вам спасибо.
Обновил программу, добавил поддержку TUN.
Режим TUN доступен, если в конфиге sing-box есть tun inbound. Можно переключать через контекстное меню в трее (при необходимости программа автоматически запросит права администратора).
Чтобы сразу включать TUN при запуске, установите параметр tun-start-mode = on в ini конфиге программы (и запускать тогда сразу нужно с правами администратора).
Когда режим TUN активен, иконка в системном трее меняется.
Другие изменения:
Альтернативное отображение селекторов в виде плоского меню (без вложенных подменю). Параметр selector-menu-layout (flat или nested). Удобно, если мало переключателей, потому что сразу видно активный, быстрее переключать.
Уведомления о сбоях. Теперь появляется уведомление, если процесс sing-box не удалось запустить или он завершился аварийно (неожиданно закрылся).
Автоматический Clash API. Если есть селекторы, но секция clash_api отсутствует, программа добавляет её автоматически.
У меня новая версия почему-то не работает. Стартует, иконка в трее появляется, но Sing-Box 1.12.13 не заводится и в логах у него тишина. Ну и “прокси сервер отказывается принимать соединения” понятное дело, потому что не запущен.
Через Quit drover не убивается и походу зависает. Так и остаётся висеть в трее. Убивается только через диспетчер задач. Tun не настраивал, системный прокси выключен. Разбираться что там да как пока не стал, не до этого. Вернул предыдущую 0.3, снова всё работает норм.
Windows 10 с самыми последними обновами.
Спасибо большое за багрепорт! Удалось найти причину. Дело оказалось в больших конфигах. Процесс sing-box создавался замороженным, потом шла передача конфига через stdin, а потом разморозка процесса. Если конфиг большой, то он не помещался в буфер, процесс ждал чтения, которого не было из-за заморозки. Просто поменял код местами. Загрузил новый релиз. Проверьте, пожалуйста, если будет возможность.
Восстановление выбранных селекторов при переключении режима TUN (ранее они сбрасывались в значения по умолчанию, но в меню это не отображалось).
Добавлено ожидание готовности API перед сбросом селекторов (ранее сброс мог не сработать, если ядро запускалось слишком долго).
Отключено переключение системного прокси по клику на значок трея, если активен режим TUN (чтобы избежать случайных переключений без визуальной индикации).