【问题标题】:Cannot Start Windows Service in NetworkService account无法在 NetworkService 帐户中启动 Windows 服务
【发布时间】:2012-08-15 22:09:12
【问题描述】:

我有一个 Windows 服务项目实施,我正在尝试将其安装为网络服务。

process = new ServiceProcessInstaller();
process.Account = ServiceAccount.NetworkService;

但是,每当我尝试启动服务时,我都会得到:

System error 5 has occurred.

Access is denied.

这是在以管理员身份运行的 Visual Studio 命令提示符中运行 net start MyService 命令之后发生的。

关于如何使它工作的任何帮助?谢谢。

【问题讨论】:

  • 检查安装路径,确保NetworkService user account具有您的服务所需的所有权限,并且该文件夹具有NS用户的执行权限。尝试将Debug.Break 放在Windows 服务OnStart 方法的第一行。被击中了吗?
  • 不,主要方法甚至没有被击中
  • 您是否在该文件夹中为 NS 用户添加了权限?允许执行是否有“标记”?
  • @oleksii:我刚接触这个 Windows 服务的东西,所以我不确定我理解你在说什么
  • @oleksii:您要添加答案吗?

标签: c# .net windows-services network-service


【解决方案1】:

我会检查网络服务帐户是否具有执行权限。检查步骤:

  1. 在 Windows 资源管理器中,转到包含服务二进制文件的文件夹
  2. 右键单击文件夹 > 属性 > 安全选项卡 > 编辑按钮
  3. 添加>“网络服务”>确定
  4. 给予它完全的控制权(只是为了测试然后减少权限直到它工作)

【讨论】:

  • 谢谢。这就是我一直在寻找的。​​span>
  • 在我的情况下,上述步骤不起作用。我已授予网络服务帐户的全部权限,当我启动服务时收到错误消息“如果某些服务没有被其他服务或程序使用,它们会自动停止。”
  • @user2323308 这是你内心的例外。不是网络服务权利的缺失。
  • 有没有办法通过 CLI 做到这一点?
  • @kkirsche 我相信有办法。见这篇文章:techrepublic.com/article/…。如果您弄明白了,能否请您用命令和参数的详细信息更新我的答案?谢谢。
【解决方案2】:

您的Net Start MyService 可能没有以升级的权限运行。您的命令需要(我相信)管理权限。

更新

不知道为什么,但是您对服务的特权很奇怪。默认情况下,服务的权限应如下所示:

D:(A;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)

ACE Type: ACCESS_ALLOWED_ACE_TYPE
Trustee: NT AUTHORITY\SYSTEM
AccessMask:
  ADS_RIGHT_DELETE
  ADS_RIGHT_READ_CONTROL
  ADS_RIGHT_WRITE_DAC
  ADS_RIGHT_WRITE_OWNER
  ADS_RIGHT_DS_CREATE_CHILD
  ADS_RIGHT_DS_DELETE_CHILD
  ADS_RIGHT_ACTRL_DS_LIST
  ADS_RIGHT_DS_SELF
  ADS_RIGHT_DS_READ_PROP
  ADS_RIGHT_DS_WRITE_PROP
  ADS_RIGHT_DS_DELETE_TREE
  ADS_RIGHT_DS_LIST_OBJECT
  ADS_RIGHT_DS_CONTROL_ACCESS

不过你的样子:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)

ACE Type: ACCESS_ALLOWED_ACE_TYPE
Trustee: NT AUTHORITY\SYSTEM
AccessMask:
  ADS_RIGHT_READ_CONTROL
  ADS_RIGHT_DS_CREATE_CHILD
  ADS_RIGHT_ACTRL_DS_LIST
  ADS_RIGHT_DS_SELF
  ADS_RIGHT_DS_READ_PROP
  ADS_RIGHT_DS_WRITE_PROP
  ADS_RIGHT_DS_DELETE_TREE
  ADS_RIGHT_DS_LIST_OBJECT
  ADS_RIGHT_DS_CONTROL_ACCESS

我不确定这到底是怎么回事。尝试卸载并重新安装?

您可以下载 SddlParse (google it :) 以解析出Security Descriptor Definition Language

【讨论】:

  • 但我提到 Visual Studio cmd 正在管理员模式下运行
  • 您已将快捷方式更改为Run As Aministrator?同样在 VS 命令提示符下键入 sc sdshow MyService 并使用它的响应更新您的问题。
  • 运行这个 sc 命令我得到以下信息:D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
  • 我从在管理员模式下运行的常规 cmd 提示符得到这个:D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
【解决方案3】:

“访问被拒绝”消息适用于尝试启动服务的用户,而不是运行服务的帐户。

您可以从以下位置启动服务吗:

  1. 服务控制面板小程序?
  2. 您自己启动的提升命令提示符(不是来自 Visual Studio)?

【讨论】:

  • 那么如何在LocalSystem模式下正常运行服务呢?
  • 我也被我启动的 cmd 提示符拒绝访问
  • 从服务小程序怎么样?不确定“本地系统模式”是什么意思。您可以通过选择顶部单选按钮让服务在 LocalSystem 帐户中运行:coretechnologies.com/WindowsServices/…
猜你喜欢
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多