#windows #batch-file #service
#Windows #пакетный файл #Обслуживание
Вопрос:
У меня есть ряд в основном идентичных пользовательских служб, которые необходимо запускать с разными параметрами. Параметры определяют, какие порты использовать для связи с приложением, и для всех них нужны разные порты. Я устанавливаю службы с помощью пакетного скрипта:
cd %~dp0InterfaceService_0x1C01
installutil interface.exe
cd %~dp0InterfaceService_0x1C02
installutil interface.exe
Затем запустите их следующим образом:
cd %~dp0InterfaceService_0x1C01
net start Interface0x1C01 /-ip=127.0.0.1 /-pn=32790 /-sp=32791
cd %~dp0InterfaceService_0x1C02
net start Interface0x1C02 /-ip=127.0.0.1 /-pn=32792 /-sp=32793
Все работает нормально, все они запускаются на разных портах. Но когда я перезагружаю компьютер, они запускаются автоматически без параметров. Я попытался изменить сценарий установки:
cd %~dp0InterfaceService_0x1C01
installutil Interface.exe
sc config Interface0x1C01 binPath="C:Program Files (x86)InterfaceServicesInterfaceService_0x1C01Interface.exe /-ip=127.0.0.1 /-pn=32790 /-sp=32791"
cd %~dp0InterfaceService_0x1C02
installutil Interface.exe
sc config Interface0x1C01 binPath="C:Program Files (x86)InterfaceServicesInterfaceService_0x1C02Interface.exe /-ip=127.0.0.1 /-pn=32792 /-sp=32793"
Я также пробовал без косых черт, но в обоих случаях служба запускается на порту по умолчанию.
Может кто-нибудь помочь с этим? Я бы хотел, чтобы этот подход работал, но я также мог бы принять помощь в установке настроек, которые не запускаются автоматически, и иметь скрипт, который запускает их автоматически при запуске — при условии, что пользователю не понадобятся права администратора в этот момент.
Комментарии:
1. Я бы посоветовал вам использовать средство управления службами,
sc.exe
вместоnet.exe
. С помощью этого вы могли бы попробоватьcreate
службу, например@"%__AppDir__%sc.exe" Create Interface0x1C01 binpath= ""C:Program Files (x86)InterfaceServicesInterfaceService_0x1C01Interface.exe" -ip=127.0.0.1 -pn=32792 -sp=32793" type= interact type= share start= auto obj= LocalSystem
. Чтобы настроить ее, заменитеCreate
наConfig
.2.Я использовал sc config для добавления binpath в измененный установочный файл, но я изменил установочный файл на использование sc, к сожалению, я получаю тот же результат. Службы запускаются без параметров. Если я остановлю их и использую скрипт stratup, они все равно будут работать. Установка теперь выглядит так:
@"%__AppDir__%sc.exe" Create Interface0x1C01 binpath= """"%~dp0InterfaceService_0x1C01Interface.exe""" -ip=127.0.0.1 -pn=32790 -sp=32791" start=auto obj= LocalSystem
@"%__AppDir__%sc.exe" description Interface0x1C01 "Service to communicate with interface PCB with ID 0x1C01"
3. Поскольку вы, по-видимому, изменили свой путь с местоположения в
Program Files
на один относительно пакетного файла, почему вы изменили цитирование, которое я использовал? Используя мой синтаксис, это должно было выглядеть так для этого пути:binpath= ""%~dp0InterfaceService_0x1C01Interface.exe" -ip=127.0.0.1 -pn=32792 -sp=32793"
, а не:binpath= """"%~dp0InterfaceService_0x1C01Interface.exe""" -ip=127.0.0.1 -pn=32790 -sp=32791"
. (Пожалуйста, обратите внимание, что междуstart=
иauto
должен быть пробел, а%~dp0
в конце уже есть обратная косая черта, которую вы тоже не учитывали.)4. Я изменил синтаксис, потому что экранирование » с обратной косой чертой по какой-то причине не сработало — я просто получил справочное сообщение для sc вместо результата. Но помещение двух кавычек выполняет свою работу, установка завершается успешно, и все параметры работают. Службы запускаются, но все еще на том же порту. Я удалил параметр interact, поскольку получил сообщение о том, что он устарел. Папка та же, я просто очистил ее, чтобы пользователям было проще устанавливать скрипты.