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

本文关键字:运行 服务 Windows | 更新日期: 2023-09-27 18:36:09

我在 C# 中创建了一个基于 WCF 的简单服务。我安装了它,在本地系统帐户下它运行良好。

问题是我需要它在特定域帐户下运行,并且它不在此帐户下运行。我收到错误

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

问题是,这个服务没有依赖项。

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

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

问题解决了。

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

由于某种未知原因,该服务已设置为"已禁用"。启用它并启动它解决了一切。

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

  1. 获取用户的 SID(例如,使用 SysInternals 中的 PsGetSid)
  2. 在管理员模式下启动记事本并打开SMSvcHost.exe.config(在C:'Windows'Microsoft.NET'Framework'v4.0.30319文件夹中)
  3. 在第 system.serviceModel.activation 节中有一个子节叫net.pipe。本节枚举标识符:本地系统、本地服务、网络服务和管理员。在本节中添加您的 sid:

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