我正在尝试安装我编写的 .NET 服务。根据 MSDN 的建议,我正在使用 InstallUtil。但是我错过了如何在命令行甚至服务本身中设置默认服务用户。现在,当 InstallUtil 运行时,它将显示一个对话框,要求用户提供用户的凭据。我正在尝试将服务安装集成到更大的安装中,并且需要服务安装保持静默。
5 回答
我想我可能已经找到了。在服务本身中,自动创建的 ServiceProcessInstaller 组件有一个属性“Account”,可以设置为“LocalService”、“LocalSystem”、“NetworkService”或“User”。它默认为必须显示提示的“用户”。
正如您所注意到的,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 基础结构,不打算直接从您的代码中使用。
还要记住不需要安装 Visual Studio的SC.exe 工具。您可以简单地将这个 exe 复制到您要创建服务的服务器上,甚至可以远程运行它。使用obj参数指定用户。
显然这个工具有一个 GUI,但我没有使用它。
是否要求您提供运行该服务的帐户或安装该服务的权限?其次,以管理员身份安装应该可以防止这种情况发生。首先,您必须将 ServiceProcessInstaller 添加到您的安装程序。
我相信服务的设计表面具有创建项目安装程序的链接。在该设计器上,您可以添加 System.ServiceProcess.ServiceProcessInstaller 类型的流程安装程序。此对象的属性允许您设置用于服务的帐户。
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);
}
如果您尝试在构造函数中设置用户名和密码,这些值将被覆盖,因此请确保覆盖“安装”以执行此操作。