使用InstallUtil安装.NET服务

38
我正在尝试安装自己编写的 .NET 服务。根据 MSDN 的建议,我正在使用 InstallUtil 进行安装。但是我忘记了如何在命令行或者服务本身中设置默认的服务用户。现在,当运行 InstallUtil 时,它会显示一个对话框,要求用户输入用户凭据。我正在尝试将服务安装集成到更大的安装程序中,并需要服务安装保持静默。
5个回答

46

我认为我可能找到了答案。在服务本身中,自动创建的ServiceProcessInstaller组件有一个名为“Account”的属性,可以设置为“LocalService”、“LocalSystem”、“NetworkService”或“User”。它默认为“User”,这可能会显示提示。


1
我想分享这篇很棒的短文,它解释了LocalSystem、LocalService和NetworkService之间的区别:http://www.windowsitpro.com/article/services/understanding-the-local-service-and-network-service-accounts - Ronnie Overby

4
正如你所注意到的,Karim,“Account”属性是解决方案。对于那些对此属性设置的安全上下文之间的区别感兴趣的人,请参考以下链接:http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx
我喜欢创建一个自安装程序,即使我在.Net 1.1文档中发现了这个内容:http://www.codeproject.com/KB/dotnet/WinSvcSelfInstaller.aspx
请注意,ManagedInstallerClass类型支持.NET Framework基础结构,不建议直接从您的代码中使用。

3
此外,请记住SC.exe工具,它不需要安装Visual Studio。您可以将此exe文件复制到要创建服务的服务器上,甚至可以远程运行它。使用< strong>obj参数指定用户。
显然,此工具有一个GUI界面,但我没有使用过。

0

InstallUtil具有命令行开关,可以避免在使用"User"作为帐户类型时出现提示。 /username/password用于在安装时配置帐户。

用法:

installutil.exe /username=user /password=password yourservice.exe

你可能想要的是一个配置文件,安装程序可以读取并安装服务。
为此,请将服务安装程序添加到您的项目中,并重载安装方法。在这个方法中,设置用户名和密码:
public override void Install(IDictionary stateSaver)
{
    serviceProcessInstaller1.Username="<username>";
    serviceProcessInstaller1.Password="<password>";
    base.Install(stateSaver);
}

如果您尝试在构造函数中设置用户名和密码,那么这些值将被覆盖,因此请确保重写“Install”以执行此操作。

0

您是被要求提供运行服务的帐户,还是需要安装服务的权限?对于后者,以管理员身份安装应该可以防止发生这种情况。对于前者,您必须向您的Installer添加一个ServiceProcessInstaller。

我相信服务的设计界面有一个链接可以创建一个项目安装程序。在那个设计师上,您可以添加一个类型为System.ServiceProcess.ServiceProcessInstaller的进程安装程序。此对象的属性允许您设置用于服务的帐户。


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