错误5:启动Windows Service时访问被拒绝


97

当我尝试启动在C#中创建的Windows服务时出现此错误:

替代文字

到目前为止,我的代码:

private ServiceHost host = null;

public RightAccessHost()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    host = new ServiceHost(typeof(RightAccessWcf));
    host.Open();
}

protected override void OnStop()
{
    if (host != null)
        host.Close();
    host = null;
}

更新#1

我通过为帐户NETWORK SERVICE授予权限解决了上述问题,但现在又遇到了另一个问题:

替代文字

更新#2

服务无法启动。System.InvalidOperationException:服务'RightAccessManagementWcf.RightAccessWcf'具有零个应用程序端点(非基础结构)。这可能是因为没有为您的应用程序找到配置文件,或者是因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在服务元素中未定义端点。在System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription说明)在System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description,ServiceHostBase serviceHost)在System.ServiceModel.ServiceHostBase.InitializeRuntime()在System.ServiceModel.ServiceHostBase.OnOpen() TimeSpan超时),位于System.ServiceModel.Channels.CommunicationObject。


2
仅从该消息中很难解决您的第二个问题。您将需要查看事件日志,看看真正的错误是什么。
马特·艾伦

1
检查系统帐户是否有权访问该文件夹。
开发人员

Answers:


116

我意识到这篇文章已经过时了,但是没有明显的解决方案,我只想提出解决问题的方法。

Error 5: Access Denied通过向NETWORK SERVICE帐户授予输出目录权限,解决了第一个错误。

Started and then stopped当服务出现故障时,第二个错误似乎是一条通用消息。检查事件查看器(特别是“ Windows日志>应用程序”)以获取真正的错误消息。

就我而言,这是app.config中错误的服务配置设置。


7
我通过使用资源管理器导航到该文件夹​​,右键单击“属性”,“安全性”,然后在用户名列表中为NETWORK SERVICE帐户分配了正确的权限,从而修改了权限。
贾斯汀斯基尔斯

就“错误5”而言,它是网络服务没有对​​可执行文件文件夹的访问权限。由于它是用于开发的,因此我不想将文件放在“程序文件”文件夹中,而是将其放在可以从开发机复制文件的共享文件夹中。授予网络服务读取/执行/列表的权限应该足够好。
ZZZ

5
我将“本地服务”和“网络服务”添加到我的bin \ Debug文件夹中并可以工作,谢谢!
Hernaldo Gonzalez 2015年

3
只是给人的提示:如果更改权限不能解决您的问题,请确保检查事件查看器是否有错误。我遇到了一个完全不相关的SQL错误,该错误阻止了服务启动,但仍然显示“错误5:访问被拒绝”。错误。
dtryan '16

感谢有关“事件查看器”的注释-与我相同,不相关的错误“未找到端点”,但伪装为“访问被拒绝(5)”
David Votrubec

26

计算机->管理->服务-> [您的服务]属性。然后是带有帐户信息的标签。使用这些设置进行操作,例如使用管理员帐户运行服务等等。

对我来说就做到了。

编辑:什么也可能是问题是,大多数服务作为LOCAL SERVICELOCAL SYSTEM帐户运行。现在,当您C:/my-admin-dir/service.exe使用这些帐户运行但又不允许它们执行该目录中的任何操作时,您将获得error 5。因此,找到该服务的可执行文件,将目录设置为人民币->属性->安全,并确保运行该服务的帐户位于可以完全控制该目录的用户列表中。


21

这对我有用。

  1. 右键单击包含服务可执行文件的顶级文件夹。转到属性
  2. 转到“安全性”选项卡
  3. 点击“编辑”
  4. 点击“添加”
  5. 输入名称“ SYSTEM”,单击“确定”。
  6. 突出显示SYSTEM用户,然后单击“完全控制”旁边的“允许”复选框
  7. 单击确定两次

11
“ SYSTEM”对我不起作用,我只是赌博并尝试了“ SERVICE”-达到了目的。
Exter'Apr

4
添加“服务”,并给予它“完全控制”为我工作-视窗10
弗雷德里克

由于我的ServiceProcessInstaller的Account属性(在ProjectInstaller中)设置为LocalService,因此我授予了Local Service帐户的完全权限,从而达到了目的!
戴夫

14

我也遇到了同样的错误,它可以通过右键单击“服务”>“属性”>“登录”>“以:本地系统帐户登录”来解决。


谢谢。我在tor.exe --service start时遇到问题,现在它像一个魅力一样起作用了!
阿曼·卡里米

为我工作。但是,是否有通过编程方式指定此内容?
西西尔(Sisir)

得到它了。右键单击serviceProcessInstaller->属性->帐户,然后将其设置为“ LocalSystem”,而不是默认的“用户”。安装服务,瞧。
西西尔(Sisir)

10

确保Path to executable指向实际可执行文件(右键单击服务->属性->常规选项卡)。通过powershell(和sc.exe),您可以安装服务而无需指向实际的可执行文件。


我不小心留了一个文件夹而不是.exe文件。要解决此问题,我必须“ sc删除servicenameXYZ” +重新启动服务器才能完全删除该服务并重新安装正确的service .exe文件。然后,它开始像一个魅力。感谢这篇文章。
Honza P.

你救了我!分配文件夹,而不是可执行文件的完整路径...哎呀!应该有更好看了...
ILTER

9

我得到了解决方案:

1. Go to local service window(where all services found)
2. Just right click on your service name: 
3. click on "properties" 
4. go to "log on" tab
5. select "local system account"
6. click "ok"

现在您可以尝试启动该服务。


1
我已经选择了“本地系统帐户”,并且仍然收到消息。
user2568374

4

在我的情况下,未检查以下内容。

在此处输入图片说明


2
对于像我这样的其他读者:此屏幕截图是服务属性窗口的一部分!打开“服务”窗口(运行:services.msc),然后从右键单击服务后显示的上下文菜单中选择“属性”!
MohaMad


3

对我而言-使用Windows“加密”选项对运行该服务的文件夹及其中的文件进行了加密。删除该-瞧!


原来这对我来说是个问题-我正在使用的服务器上的小丑sysadmins拨动了一些旋钮以使所有目录默认都具有NTFS加密,因此LocalSystem实际上没有用于读取它们的加密密钥...
KJ Tsanaktsidis

3

如果您的OnStart方法有错误,则会发生此错误。您不能直接在OnStart方法中打开主机,因为调用它时主机实际上不会打开,而是将等待控件。因此,您必须使用线程。这是我的例子。

public partial class Service1 : ServiceBase
{
    ServiceHost host;
    Thread hostThread;
    public Service1()
    {
        InitializeComponent();
         hostThread= new Thread(new ThreadStart(StartHosting));

    }

    protected override void OnStart(string[] args)
    {
        hostThread.Start();
    }

    protected void StartHosting()
    {
        host = new ServiceHost(typeof(WCFAuth.Service.AuthService));
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}

3

如果您的访问被拒绝,错误代码为5。那么可能是在您的代码中,您的服务正在尝试与系统中的某些文件进行交互,例如写入日志文件

打开服务属性,选择log on选项卡并选中选项以允许服务与桌面进行交互, 单击允许服务与桌面进行交互


3

导致此错误的原因之一是本地文件夹中的权限(经过身份验证的用户)不足。授予“经过身份验证的用户”权限打开文件夹属性中的“安全性”选项卡,然后编辑并添加“经过身份验证的用户”组并应用更改。

完成此操作后,我什至可以通过网络服务帐户运行服务(在此之前,我只能使用本地系统帐户运行)。


2

我使用OWIN和TopShelf托管Windows服务。我无法启动它。同样的错误-“访问被拒绝5”

我最终将所有权限都交给了bin / Debug。

该问题仍未解决。

因此,我查看了事件日志,结果发现该Microsoft.Owin.Host.HttpListener事件未包含在包含OWIN启动类的类库中。

因此,在开始进入烫发等之前,请确保检查事件日志以找出根本原因。


2
好处-“访问被拒绝”错误可能与权限无关;始终在事件查看器中检查应用程序日志。
mhenry1384 '18

嗨,我也在检查这个问题,我在topshelf上登录的`。\ logs`路径在哪里,但是它不在那儿
转换器

2

就我而言,我必须在安装了可执行文件的文件夹的“组或用户名”列表中添加“授权用户”。



1

在服务安装程序中使用LocalSystem帐户而不是LocalService帐户。

您可以通过以下更改来执行此操作:在服务安装程序的设计视图中进行以下更改:
服务流程安装程序的属性->将帐户设置为LocalSystem。

或通过在服务安装程序的designer.cs文件中进行以下更改:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

1

右键单击serviceservice.msc中的,然后选择property

您将在Path to executableC:\ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe 下看到一个文件夹路径

导航到C:\ Users \ Me \ Desktop \ project \ Tor,然后右键单击Tor。

选择propertysecurityedit然后add。在文本字段中输入LOCAL SERVICE,单击确定,然后选中复选框FULL CONTROL

点击add一次,然后输入NETWORK SERVICE,点击ok,勾选FULL CONTROL

然后单击确定(在底部)



0

对于错误5,我所做的与上述解决方案相反。“通过将输出目录的权限授予NETWORK SERVICE帐户,解决了第一个错误5:“拒绝访问”错误。”

我将我的帐户更改为本地帐户,而不是网络服务帐户,并且因为我以管理员身份登录,所以可以正常工作


0

如果在服务器计算机上遇到此错误,请尝试访问拥有真实Windows服务exe的文件夹。您应转到安全性选项卡,然后以用户身份选择本地服务,并应授予完全访问权限。您也应该对exe做同样的事情。


0

我已经使用进程监视器监视了sppsvc.exe,发现它试图写入HKEY_LOCAL_MACHINE \ SYSTEM \ WPA密钥。在授予该密钥NETWORK SERVICE的权限后,我能够启动该服务,Windows突然意识到它已被再次激活。


0

我不小心将服务设置为运行,因为Local service解决方案是切换到Local System


0

在将我的桌子撞到桌子上试图弄清楚了几个小时后,不知何故,我的“ Main”方法就清空了代码!

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new DMTestService()
};
ServiceBase.Run(ServicesToRun);

我发现的其他解决方案:

  • 将.NET Framework更新到4.0
  • 确保InitializeComponent()中的服务名称与安装程序的服务名称属性匹配

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • 良好的服务器重启不会造成伤害

舍洛普



0

今天,我在一个正在开发的服务上遇到了这个问题,关于这个问题的其他建议都没有起作用。就我而言,服务运行所在的文件夹中缺少.dll依赖项。

当我添加依赖项时,问题就消失了。


0

就我而言,我将项目保留在桌面上,并且要访问桌面,我们需要向该文件夹添加权限,因此我只是将项目文件夹移动到C:\目录,现在它的工作就像一个魅力。


0

我不知道我的答案是否对许多人有意义,但是我也面临同样的问题,解决方案非常简单。我要做的就是打开我用来以管理员身份运行代码的程序。(右键单击->以管理员身份运行)。

这就是全部了。


0

如错误弹出窗口所示,这与权限有关。因此,以“ LocalSystem”帐户身份运行该服务。

为此,请右键单击serviceProcessInstaller -> Properties -> Account并将其设置为"LocalSystem"而不是默认值"User"。安装服务,瞧。


这是一种行之有效的修复方法,没有任何解决方法。向下选民可以解释不喜欢的理由让别人理解
SISIR


-1

我在正在部署的服务上遇到了这个问题,关于这个问题的其他建议都没有起作用。就我而言,这是因为我的.config(xml)无效。从qualif复制到prod时出现复制和粘贴错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.