38

我正在尝试安装我编写的 .NET 服务。根据 MSDN 的建议,我正在使用 InstallUtil。但是我错过了如何在命令行甚至服务本身中设置默认服务用户。现在,当 InstallUtil 运行时,它将显示一个对话框,要求用户提供用户的凭据。我正在尝试将服务安装集成到更大的安装中,并且需要服务安装保持静默。

4

5 回答 5

46

我想我可能已经找到了。在服务本身中,自动创建的 ServiceProcessInstaller 组件有一个属性“Account”,可以设置为“LocalService”、“LocalSystem”、“NetworkService”或“User”。它默认为必须显示提示的“用户”。

于 2008-08-28T13:07:36.167 回答
4

正如您所注意到的,Karim,“帐户”属性是解决方案,在这里。对于那些对此属性设置的安全上下文之间的差异感兴趣的人:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

以上使用 InstallUtil 或 SC,我喜欢创建SELF INSTALLER的想法:

http://www.codeproject.com/KB/dotnet/WinSvcSelfInstaller.aspx

即使我在 .Net 1.1 文档中发现了这一点:

ManagedInstallerClass类型支持 .NET Framework 基础结构,不打算直接从您的代码中使用。

于 2009-07-16T22:50:46.510 回答
3

还要记住不需要安装 Visual Studio的SC.exe 工具。您可以简单地将这个 exe 复制到您要创建服务的服务器上,甚至可以远程运行它。使用obj参数指定用户。

显然这个工具有一个 GUI,但我没有使用它。

于 2008-09-10T15:07:17.723 回答
0

是否要求您提供运行该服务的帐户或安装该服务的权限?其次,以管理员身份安装应该可以防止这种情况发生。首先,您必须将 ServiceProcessInstaller 添加到您的安装程序。

我相信服务的设计表面具有创建项目安装程序的链接。在该设计器上,您可以添加 System.ServiceProcess.ServiceProcessInstaller 类型的流程安装程序。此对象的属性允许您设置用于服务的帐户。

于 2008-08-28T13:09:39.687 回答
0

InstallUtil 具有命令行开关,可以避免使用“用户”作为帐户类型时的提示。/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);
}

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

于 2018-06-02T21:18:53.527 回答