错误5:启动Windows服务时拒绝访问

时间:2010-11-24 13:00:38

标签: c# .net wcf windows-services

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

alt text

我的代码到目前为止:

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 的权限解决了上述问题,但现在我遇到了另一个问题:

alt text

更新#2

  

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

30 个答案:

答案 0 :(得分:108)

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

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

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

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

答案 1 :(得分:23)

计算机 - >管理 - >服务 - > [您的服务]属性。 然后是带有帐户信息的选项卡。使用这些设置进行播放,例如使用管理员帐户运行服务。

这是为我做的。

编辑: 问题还在于,大多数服务都以LOCAL SERVICELOCAL SYSTEM帐户运行。现在,当您使用这些帐户运行C:/my-admin-dir/service.exe但不允许他们执行该目录中的任何内容时,您将获得error 5。所以找到服务的可执行文件,RMB目录 - >属性 - >安全性并确保运行该服务的帐户位于可以完全控制目录的用户列表中。

答案 2 :(得分:17)

这对我有用。

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

答案 3 :(得分:11)

我也得到了同样的错误,它解决了 右键单击Service>属性>登录>登录为:本地系统帐户。

答案 4 :(得分:8)

确保Path to executable指向实际可执行文件(右键单击服务 - >属性 - >常规标签)。 通过powershell(和sc.exe),您可以在不指向可执行文件的情况下安装服务......嗯。

答案 5 :(得分:5)

我得到了解决方案:

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"

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

答案 6 :(得分:4)

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

enter image description here

答案 7 :(得分: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();
    }
}

答案 8 :(得分:3)

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

打开服务属性选择log on选项卡并选中选项以允许服务与桌面交互, click allow service to interact with desktop

答案 9 :(得分:2)

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

我最终将所有权限提供给我的bin / Debug。

问题仍未解决。

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

因此,请确保在开始进入权限之前检查事件日志以确定根本原因等。

答案 10 :(得分:2)

对我来说 - 运行服务的文件夹及其中的文件是使用Windows“加密”选项加密的。删除它 - 瞧!

答案 11 :(得分:1)

在Service Installer中使用LocalSystem帐户而不是LocalService帐户。

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

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

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

答案 12 :(得分:1)

您的代码可能在不允许启动服务的用户的安全上下文中运行。

由于您使用的是WCF,我猜您正处于NETWORK SERVICE的上下文中。

请参阅:http://support.microsoft.com/kb/256299

答案 13 :(得分:1)

右键点击service.msc中的service,然后选择property

您将在Path to executable下看到一个文件夹路径,例如C:\ 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

然后点击确定(在底部)

答案 14 :(得分:1)

在我的情况下,我必须添加“经过验证的用户”#39;在“组或用户名”列表中'在安装可执行文件的文件夹中。

答案 15 :(得分:1)

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

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

答案 16 :(得分:0)

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

仅此而已。

答案 17 :(得分:0)

我收到此错误是因为我从这里误读了接受的答案:Create Windows service from executable

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

对于<path_to_service_executable>,我使用的是可执行文件的文件夹路径,例如C:\Folder

它必须是可执行文件的路径,例如C:\Folder\Executable.exe

希望这可以帮助犯过与我相同的愚蠢错误的人。

答案 18 :(得分:0)

检查Windows事件日志以获取详细的错误消息。检查事件日志后,我解决了同样的问题。

答案 19 :(得分:0)

今天我在这个问题上讨论了我正在开发的服务,而且关于这个问题的其他任何建议都没有奏效。就我而言,我在运行服务的文件夹中缺少.dll依赖项。

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

答案 20 :(得分:0)

在我的情况下,我将项目保留在桌面上并访问桌面,我们需要为文件夹添加权限,所以我只需将项目文件夹移动到C:\目录,现在它就像魅力一样。

答案 21 :(得分:0)

在可能的情况下,系统会耗尽本地磁盘上的可用空间。

答案 22 :(得分:0)

在我的桌子上撞了几个小时试图解决这个问题之后,不知怎的,我的“主要”方法清空了它的代码!

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

我找到的其他解决方案:

  • 将.NET框架更新为4.0
  • 确保InitializeComponent()内的服务名称与安装程序服务名称属性

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

Szhlopp

答案 23 :(得分:0)

我不小心将我的服务设置为Local service解决方案是要切换到Local System

答案 24 :(得分:0)

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

答案 25 :(得分:0)

如果您在服务器计算机上收到此错误,请尝试访问您获得真正的Windows服务exe的文件夹。您应该转到安全选项卡并选择本地服务作为用户,并应提供完全访问权限。你也应该为exe做同样的事情。

答案 26 :(得分:0)

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

我将我改为本地帐户,而不是网络服务帐户,因为我以管理员身份登录,所以

答案 27 :(得分:0)

http://www.sysinternals.com查看Process Utilities > Process monitor

这是一个允许您监控进程执行操作的工具。如果您监视此服务进程,您应该看到某处拒绝访问,以及拒绝访问的资源。

答案 28 :(得分:-1)

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

要执行相同的操作,请右键单击serviceProcessInstaller -> Properties -> Account并将其设置为"LocalSystem",而不是默认的"User"。安装服务并确认。

答案 29 :(得分:-2)

点击Start菜单,然后选择Run或使用 Win + R 的键盘快捷键。

在对话框中,键入lusrmgr.msc。此应用程序打开后,单击左侧面板中的“用户”,然后右键单击右侧面板中的Administrator。点击菜单中的Properties

Administrator Properties对话框中,选择Member Of标签,然后点击右下方的添加...按钮。在下一个对话框中,选择Advanced...

将出现另一个对话框。从那里点击右侧的Find Now。搜索结果列表将显示在对话框的底部。从此列表中选择Network Services,然后在每个打开的对话框中点击OK