Недавно я работал над инструментом CLI, предназначенным для использования в качестве приложения для резервного копирования. При разработке этого инструмента я дошел до той части, где мне пришлось реализовать функцию, которая заставляла бы этот скрипт запускаться при запуске. В то время как для дистрибутивов Linux я нашел много ресурсов о том, как реализовать это поведение при запуске, для Windows все было немного сложнее, поскольку это был непростой процесс.

Без лишних разговоров, вот как я это сделал и как вы можете реализовать это для себя 😊

Конечная цель

Чтобы все было как можно более общим, мы объясним теорию этого процесса, используя воображаемый вариант использования.

Поэтому предположим, что мы хотим создать приложение CLI с именем my-super-script, которое каждый раз, когда вы открываете свой компьютер, будет записывать текущее время в .txt файл. Для выполнения этого действия необходимо выполнить команду my-super-script startup do-logic.

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

Папка автозагрузки

В Windows самый простой способ запустить программу при запуске - поместить исполняемый файл в папку Автозагрузка.

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

Расположение этой папки в Windows:

%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup

Вы можете легко открыть эту папку, нажав WINDOWS KEY + R, а затем скопировав этот текст shell:startup.

.Bat файл

Теперь, когда мы знаем, что папка Startup - это папка, в которую нам нужно поместить что-то для запуска нашего скрипта, все, что нам нужно сделать, это создать это something .

Мы можем сделать это, создав файл BAT (.bat) со следующим содержимым:

Этот пакетный сценарий выполнит нашу команду без вывода сообщений в терминал из-за первой строки @echo off.

Одно это сделает работу.

Однако, если мы скопируем этот .bat файл в папку «Автозагрузка», а затем перезагрузим компьютер, мы увидим, что командная строка открывается и мигает менее секунды.

Фактически, это окно командной строки будет оставаться открытым, пока активна наша программа, запущенная через my-super-script startup do-logic. Таким образом, если мы воспользуемся нашим гипотетическим вариантом использования, упомянутым выше, и предположим, что нашему инструменту CLI потребуется 2 секунды для регистрации текущего времени в файле .txt, тогда это окно командной строки останется видимым в течение 2 секунд.

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

Нам нужно найти способ запустить эту команду my-super-script startup do-logic, но без видимого окна командной строки.

Файл .vbs

Решение этой проблемы - создать файл VBS (.vbs) и поместить его в папку Автозагрузка вместо файла .bat.

И цель этого .vbs файла - выполнить ранее созданный сценарий bash, но без отображения оболочки.

Полный рабочий процесс будет выглядеть следующим образом:

  1. Создается файл .vbs, который копируется в папку автозагрузки.
  2. Файл .vbs будет запускать файл .bat при запуске.
  3. Файл .bat запустит нашу программу.

Если у нас есть файл .vbs в папке Startup, команда commandmy-super-script startup do-logic будет выполняться каждый раз при запуске, без создания окна командной строки.

Код в действии

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

Код написан на NodeJS, но как только вы поймете принцип работы, вам будет легко реализовать его на желаемом языке.

Благодарим за внимание. Если вы нашли эту статью полезной, нажмите 👏 .