在远程计算机上使用给定的用户名安装Windows服务

13

如何在远程机器上安装用C#编写的Windows服务(以标准方式),并提供运行该服务所需的用户名和密码?

我将在集成测试的一部分中从MSBuild中运行它。

编辑:我没有.msi文件,也不想创建一个。

4个回答

28

你可以使用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> 

看起来非常有前途,但是我需要付费吗? - Grzenio
它包含在Windows中,可能在资源工具包中,打开命令提示符并键入sc以查看是否已安装。 - Patrick McDonald
1
注意:如果从PowerShell运行此命令,请使用sc.exe而不是sc。在PowerShell中,sc是Set-Content的别名。这是一个小细节需要注意。 - Crab Bucket
小心传递带有特殊字符的复杂密码,因为即使在密码周围加上双引号也无法保护你。https://dev59.com/pWkv5IYBdhLWcg3w3Ug0 - duct_tape_coder

1

使用WMI从Powershell调用Installutil是一种方法。


0

我们过去一直使用PsExec在远程机器上进行各种操作。 现在我看到了另一种解决方案,叫做PowerShell Remoting,但我自己还没有尝试过。


0

你可以考虑查看我编写的一个实用程序,它允许你在本地或远程计算机上安装/卸载/启动/停止Windows服务。如果你需要添加功能,请告诉我(评论/GitHub问题或私信),我会很乐意帮忙。

GitHub上的ServiceConfigurator

正如@Raj More所建议的那样,它使用从.NET调用的WMI。


出于好奇,它与SC有何不同? - Grzenio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接