使用特定域帐户时,C# Windows 服务不会 运行

C# Windows service doesn't run when using a specific domain account

我用 C# 创建了一个简单的、基于 WCF 的服务。我安装了它,并且在本地系统帐户下 运行 没问题。

问题是我需要在特定的域帐户下运行,而在该帐户下没有运行。我收到错误

Error 1068: The dependency service or group failed to start.

事实是,此服务没有依赖项。

该帐户是本地管理员并且具有作为服务登录的权限。而且问题似乎根本不在我的代码中,因为我在 Main() 启动时写入事件日志,然后再发生任何其他事情 - 而且当我使用域帐户时我什至没有得到该日志。

您必须授予您的用户帐户权限。

  1. 获取用户的 SID(例如,使用来自 SysInternals 的 PsGetSid)
  2. 以管理员模式启动记事本并打开 SMSvcHost.exe.config(在 C:\Windows\Microsoft.NET\Framework\v4.0.30319 文件夹中)
  3. 在第 system.serviceModel.activation 节中有一个小节 称为 net.pipe。本节列举了标识符: LocalSystem、LocalService、NetworkService 和管理员。 在此部分添加您的 sid:

    <add securityidentifier="your-SID-that-starts-with-S">
    
  4. 重新启动 Net.Pipe 侦听器适配器服务

问题已解决。

查看系统事件日志,我看到该服务依赖于 DNS 客户端服务。这不是实际的依赖关系,但显然当服务设置为以域用户身份登录时,它需要此服务 运行.

由于某些未知原因,该服务被设置为禁用。启用它并启动它解决了所有问题。