我正在尝试安装我写的.NET服务。根据MSDN的建议,我使用的是InstallUtil。但我错过了如何在命令行甚至服务本身设置默认服务用户。现在,当运行InstallUtil时,它将显示一个对话框,询问用户用户的凭据。我正在尝试将服务安装集成到更大的安装中,并且需要服务安装保持静默。
答案 0 :(得分:44)
我想我可能已经找到了它。在服务本身中,自动创建的ServiceProcessInstaller组件具有属性“Account”,可以将其设置为“LocalService”,“LocalSystem”,“NetworkService”或“User”。它默认为“用户”,必须显示提示。
答案 1 :(得分: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 基础设施并不打算 直接在您的代码中使用。
答案 2 :(得分:3)
另请注意 SC.exe util ,它不需要安装visual studio。您只需将此exe文件复制到要创建服务的服务器,甚至可以远程运行。使用 obj 参数指定用户。
显然这个工具有一个GUI,但我没有使用它。
答案 3 :(得分:0)
是否要求您在帐户下运行服务,或者是否有权安装该服务?对于第二个,安装为管理员应该防止这种情况发生。首先,您必须向安装程序添加ServiceProcessInstaller。
我相信服务的设计界面有一个创建Project Installer的链接。在该设计器上,您可以添加System.ServiceProcess.ServiceProcessInstaller类型的进程安装程序。此对象的属性允许您设置要用于服务的帐户。
答案 4 :(得分: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);
}
如果您尝试在构造函数中设置用户名和密码,那么这些值将被覆盖,因此请确保覆盖&#34;安装&#34;这样做。