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

有帮助吗?

解决方案

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

其他提示

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

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

上面使用 InstallUtil 或 SC,我喜欢创建一个 自安装程序:

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

尽管我在 .Net 1.1 文档中找到了这一点:

托管安装程序类 类型 支持 .NET Framework 基础设施,不打算 直接从代码中使用。

还要记住 SC.exe 实用程序 不需要安装 Visual Studio。您只需将此 exe 复制到您想要创建服务的服务器,甚至 远程运行它. 。使用 对象 参数来指定用户。

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

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

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

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”来执行此操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top