系统错误 5 启动 .NET 服务时访问被拒绝

Posted

技术标签:

【中文标题】系统错误 5 启动 .NET 服务时访问被拒绝【英文标题】:System error 5 Access is denied when starting a .NET service 【发布时间】:2010-10-09 03:11:44 【问题描述】:

当我尝试启动在 Visual Studio 中创建的服务时,我收到以下错误:

System error 5 has occurred.

Access is denied.

我正在使用提升的权限运行命令行,所以这不是问题。有什么地方我可以看看发生了什么错误。

【问题讨论】:

【参考方案1】:

为了让它工作,我需要为我的服务项目的输出 bin\debug 文件夹添加权限。

本地服务帐户没有对输出 .exe 文件的权限,这就是发生错误的原因。

【讨论】:

真的很傻。我只是从调试文件夹运行安装,我认为它将实际的可执行文件放在正确的目录中。权限起到了作用。 也为我工作 - 谢谢。我只是想尝试一下,从 Debug 文件夹安装是一个懒惰的选择:-) 当您自己找到解决方案时发布此答案是一件好事。我有同样的问题,它帮助了我。谢谢:-D 您能否详细说明解决此问题所需的步骤? 大家好,请详细说明一下。向 bin/debug. 添加权限是什么意思?谢谢。【参考方案2】:

有同样的问题。

通过在“本地系统帐户”下运行服务修复

【讨论】:

【参考方案3】:

就我而言,解决方案就这么简单:以 administrator 身份运行命令提示符。

【讨论】:

但是当您尝试通过任务计划安排服务时,此解决方案将不起作用。【参考方案4】:

我看到你已经解决了这个问题;但实际上,您通常不应该从项目的 bin 文件夹中运行服务 - 文件应该放在项目和配置文件独立的某个位置(例如,在程序文件下)。出于调试目的(当它在 bin 文件夹中时),您可以检测它是否是 Main() 中的服务,如果它正在交互运行,则直接运行服务代码,而不是通常的服务启动设置。

您可以通过添加命令行参数来检测,也可以尝试检查Environment.UserInteractive

【讨论】:

是的,在我的场景中是在 DEV 中,构建后事件为我部署并启动服务,准备好附加到它。 这是对的,但调试作为本地服务用户运行的服务也很重要,否则在生产中运行时可能会遇到意外的权限问题。 Marc 的建议是正确的做法 :) 如果您只是想克服错误,请查看接受的答案【参考方案5】:

本地服务帐户似乎没有控制服务的特权。因此,在服务的登录属性中,将帐户类型更改为本地系统并允许服务与桌面交互。

另外,请确保您以管理员身份使用 instalutil 安装服务。

最后,当您想使用“net start [服务名称]”命令从命令提示符运行服务时,您必须以管理员身份运行命令提示符。

【讨论】:

【参考方案6】:

我遇到了同样的问题,因为我的项目及其源代码位于启用了 NTFS 加密文件系统 (EFS) 的文件夹中。这是由于编译的程序集也被加密,并且运行我的服务的用户没有解密它们的权限。删除 EFS 是解决此问题的简单方法。它可以通过命令行使用 CIPHER.EXE 来完成,它是一个 Windows 工具。

【讨论】:

【参考方案7】:

当我将服务从 vs05 迁移到 vs2010,同时从框架 2.0 迁移到框架 4.0 时,我遇到了同样的问题。我被拒绝访问。一旦更改回框架 2.0,它就会再次工作。 ?%¤#%&%& 问题是服务的初始化字符串不正确(?!)。字符串的开头和结尾都需要引号!

Before....path + service name" "/parameter=1 ' 这适用于框架 2.0

之后...."路径+服务名" "/parameter=1"

拒绝访问与问题无关。为什么不是“找不到路径”或“缺少参数”

【讨论】:

【参考方案8】:

具有管理员权限的用户帐户会提示“您确定吗?”在未提示管理员帐户的情况下。我在使用 net stop netprofm 时遇到了这个问题。

要删除提示,请执行此操作。

控制面板,用户帐户,更改用户帐户控制设置,从不通知

这似乎为具有管理员权限的用户帐户提供了与管理员帐户相同的行为。

【讨论】:

【参考方案9】:

从具有最高权限的任务计划程序运行它,它会工作。

【讨论】:

【参考方案10】:

我在运行“sc config”来更改服务的 binPath 后遇到了这个问题。

对我有用的唯一修复是“sc删除”服务并重新安装。

此后一切顺利。

【讨论】:

【参考方案11】:

不要简单地以不同的用户名或管理员启动服务。 (当然,除非您的服务实际上需要管理员权限!)这是一个安全漏洞,会造成糟糕的用户体验。

实际的问题是服务一开始没有被分配任何权限。

但是,必须注意的是,Microsoft 并没有完全让它们易于更改 - 服务权限类似于常规文件权限,但遗憾的是无法通过简单的右键单击来更改。然而,它们可以通过以下方式阅读:

sc.exe sdshow <service name>

并通过以下方式编写:

sc.exe sdset <service name> <permissions>
&lt;service name&gt; 是您的服务名称。 &lt;permissions&gt; 是 SDDL 格式的权限。

所以使用sdshow 获取权限,然后使用sdset 根据您的要求更新它们。 SDDL 是看似随机的字母的杂音,超出了本文的范围,更让人联想到 Unix 而不是 Windows。 简而言之,添加描述符 (A;;RPWP;;;WD) 将允许 (A) 每个人 (WD) 启动 (RP) 和停止 (WP) 命名服务。

【讨论】:

以上是关于系统错误 5 启动 .NET 服务时访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

windows 无法在本地计算机上启动服务错误 5 访问被拒绝

Windows Firewall ICS服务启动不了 拒绝访问错误5 重置后 自动关闭

Server 服务因下列错误而停止: 拒绝访问。

批量插入时操作系统错误代码 5(拒绝访问。)

win7无法启动安全中心,错误5:拒绝访问!!

asp.net MVC 4 0x80070005 - Javascript 运行时错误:访问被拒绝