2

Фон:

Мне нравится, когда мой компьютер чист. Особенно мне не нравятся программы и сервисы, начинающиеся с моих окон, но я все еще хочу использовать все свои программы без необходимости вручную запускать сервисы и зависимости. Разумно, верно? Также я хочу иметь возможность запускать большинство моих программ через командную строку.

Среда

В моем пользовательском каталоге у меня есть папка bin, содержащая символические ссылки (файлы .lnk), указывающие на соответствующую программу (program.lnk указывает на программу под названием program). Эта папка включена в переменную окружения PATH.

Если у программы есть зависимость, например, служба, ссылка не указывает на программу напрямую, а на небольшой BATch-скрипт, расположенный в подпапке bin-папки. Этот скрипт запускает необходимые службы, а затем запускает программу. Упрощенный скрипт выглядит примерно так:

:restart
net start "Nessesary Service"
net start | find "Nessesary Service" > nul 2>&1
if %errorlevel%==0 goto start
goto restart
:start
start program.lnk
exit

Program.lnk находится в той же подпапке, в которой находятся скрипты, и теперь указывает на реальную программу, которая должна быть запущена. Но оно имеет то же имя, что и начальная ссылка в папке bin.

Актуальная проблема:

Если я сейчас открою Run (нажав Windows + R) и наберу программу (или program.lnk в cmd), он найдет program.lnk через переменную PATH в папке bin, перейдет по ссылке в подпапку и выполнит команду скрипт. Сценарии запускают службу, а затем, когда дело доходит до строки «start program.lnk», начинаются странные вещи.

Кажется, он повторяет PATH еще раз, поскольку тот же сценарий выполняется снова. Но вместо открытия другого экземпляра cmd с помощью скрипта запуска, когда он достигает строки «program.lnk», он теперь открывает ссылку в подпапке и, таким образом, запускает программу.

Так что все, что я действительно вижу, это два окна cmd на короткое время.

Мой вопрос

Мой вопрос, ПОЧЕМУ, конечно. Почему он открывает ссылку, находя ссылку через мою переменную PATH вместо того, чтобы сначала заглянуть в каталог и найти ссылку program.lnk? И почему тогда он не делает то же самое для второго экземпляра сценария? Я проверил через taskmanager аргументы командной строки процессов CMD через taskmanager, и они точно такие же. Я не могу понять, какая помощь, любая помощь приветствуется :)

редактировать

Я провел еще несколько тестов и, как оказалось, текущий каталог первой оболочки - это не папка bin, а system32. Второй cmd начинается с правильного каталога и, следовательно, запускает программу. Странная вещь:

Это только тот случай, когда начальный ярлык настроен на запуск с правами администратора (свойства -> ярлык -> расширенный), которые необходимы для запуска службы. Я не знаю, почему это так, но, по крайней мере, это решает это для меня. Я использовал это, чтобы сделать запрос скрипта администратором сам по себе, а не с помощью быстрого вызова.

1 ответ1

1

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

cd %~dp0

в начале делает свое дело.

Информация о параметрах партии Информация о параметрах партии

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .