Установка службы Windows на удаленном компьютере с использованием заданного имени пользователя

Каков наилучший способ установки службы Windows, написанной на С# (стандартным образом) на удаленном компьютере, где мне нужно указать имя пользователя и пароль, которые должны выполняться как?

Я собираюсь запустить его из MSBuild в рамках интеграционных тестов.

EDIT: у меня нет msi, и я не хочу его создавать.

Ответы

Ответ 1

Вы можете использовать команду SC.

sc.exe \\remotecomputer create newservice binpath= C:\Windows\System32\Newserv.exe start= auto obj= DOMAIN\username password= pwd

(Обратите внимание на пробелы после того, как знаки равенства важны)

Creates a service entry in the registry and Service Database.
SYNTAX: 
sc create [service name] [binPath= ] <option1> <option2>...
CREATE OPTIONS:
NOTE: The option name includes the equal sign.
 type= <own|share|interact|kernel|filesys|rec>
       (default = own)
 start= <boot|system|auto|demand|disabled>
       (default = demand)
 error= <normal|severe|critical|ignore>
       (default = normal)
 binPath= <BinaryPathName>
 group= <LoadOrderGroup>
 tag= <yes|no>
 depend= <Dependencies(separated by / (forward slash))>
 obj= <AccountName|ObjectName>
       (default = LocalSystem)
 DisplayName= <display name>
 password= <password> 

Ответ 2

Идентификатор Installutil, вызванный из WMI, вызываемого из Powershell, является одним из способов.

Ответ 3

Мы использовали PsExec, чтобы делать все на удаленной машине. В это время я увидел другое решение, называемое PowerShell Remoting, но не пробовал себя.

Ответ 4

Возможно, вам стоит проверить утилиту, которую я написал, которая позволяет устанавливать/удалять/запускать/останавливать службы Windows на локальной или удаленной машине. Если у вас есть функция, которую вам нужно добавить, дайте мне знать (комментарии/вопросы github или PM, и я с радостью соглашусь).

ServiceConfigurator на GitHub

Как пояснил @Raj More, он использует WMI, вызванный .NET.