Установка службы Windows с параметрами

#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, поскольку получил сообщение о том, что он устарел. Папка та же, я просто очистил ее, чтобы пользователям было проще устанавливать скрипты.