当我尝试启动我在Visual Studio中创建的服务时,收到以下错误:
System error 5 has occurred.
Access is denied.
我正在使用提升的权限运行命令行,所以这不是那个问题。我有什么地方可以看看发生了什么错误。
答案 0 :(得分:49)
为了让它工作,我需要为我的服务项目的输出bin \ debug文件夹添加权限。
本地服务帐户没有输出.exe文件的权限,这就是错误发生的原因。
答案 1 :(得分:17)
有同样的问题。
通过在“本地系统帐户”下运行服务来修复
答案 2 :(得分:12)
就我而言,解决方案就是这么简单:以管理员运行命令提示符。
答案 3 :(得分:10)
我看到你已经解决了这个问题;但实际上,你通常不应该从项目的bin文件夹运行服务 - 文件应该放在项目和配置文件独立的地方(例如,在程序文件下)。出于调试目的(当将位于bin文件夹中时),您可以检测它是否是Main()
中的服务,如果它是以交互方式运行,只需直接运行服务代码,而不是通常的服务启动设置。
您可以通过添加命令行参数进行检测,也可以尝试检查Environment.UserInteractive
。
答案 4 :(得分:2)
本地服务帐户似乎没有特权来控制服务。因此,在服务的LogOn属性中,将帐户类型更改为本地系统,并允许服务与桌面交互。
另外,请确保使用instalutil以管理员身份安装服务。
最后,如果要使用“net start [service name]”命令从命令提示符运行服务,则必须以管理员身份运行命令提示符。
答案 5 :(得分:1)
我遇到了同样的问题,因为我的项目及其源代码位于启用了NTFS的加密文件系统(EFS)的文件夹中。这是由编译的程序集加密引起的,并且运行我的服务的用户没有权限解密它们。删除EFS是一个简单的解决方案。它可以通过命令行使用CIPHER.EXE来完成,这是一个Windows工具。
答案 6 :(得分:0)
当我将服务从vs05迁移到vs2010时,我遇到了同样的问题,同时从框架2.0迁移到框架4.0。我拒绝访问Access。一旦改回框架2.0,它就会再次起作用。 ?%¤#%&%&问题是服务的初始化字符串不正确(?!)。字符串预期在开头和结尾处引用!
之前....路径+服务名称“”/参数= 1'这适用于框架2.0
之后......“路径+服务名称”“/参数= 1”
Access Denied与此问题无关。为什么不“找不到路径”或“缺少参数”
答案 7 :(得分:0)
Run it from Task Scheduler with highest privileges and it will work.
答案 8 :(得分:0)
在未提示管理员帐户的情况下,具有管理员权限的用户帐户将提示“您确定吗?”我有net stop netprofm这个问题。
要删除提示,请执行此操作。
控制面板,用户帐户,更改用户帐户控制设置,永不通知
这似乎为用户帐户提供了与管理员帐户相同的管理权限。
答案 9 :(得分:0)
在运行'sc config'来更改服务的binPath后,我遇到了这个问题。
对我有用的唯一解决方法是“删除”服务并重新安装。
之后事情很顺利。
答案 10 :(得分:0)
不要简单地以其他用户名或管理员身份启动服务。 (当然,除非您的服务实际上需要管理员权限!)这是一个安全漏洞,会带来不良的用户体验。
实际的问题是,该服务没有首先分配任何权限。
但是,必须指出的是,Microsoft并未完全使它们易于更改-服务权限类似于常规文件权限,但是不幸的是,不能通过简单的右键单击来更改它们。但是,可以通过以下方式读取它们:
sc.exe sdshow <service name>
并通过以下方式编写:
sc.exe sdset <service name> <permissions>
<service name>
是您的服务名称。<permissions>
是SDDL格式的权限。因此,请使用sdshow
获取权限,然后使用sdset
根据您的要求更新权限。 SDDL杂乱无章,看似随机的字母,超出了本文的讨论范围,比Windows更让人联想到Unix。
简而言之,添加描述符(A;;RPWP;;;WD)
将允许(A
)每个(WD
)所有人(RP
)和停止(WP
)命名服务。