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

问题:

当我尝试启动在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描述,ServiceHostBase serviceHost)在System.ServiceModel.ServiceHostBase.InitializeRuntime()在System.ServiceModel.ServiceHostBase.OnOpen()在System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超时)在C:\\ Users中的RightAccessHosting.RightAccessHost.OnStart(String [] args)处。

I’m getting this error when I try to start a windows service I’ve created in C#:My Code so far:Update #1I solved the issue above by granting permissions to the account NETWORK SERVICE but now I have an another problem:Update #2Service cannot be started.System.InvalidOperationException: Service ‘RightAccessManagementWcf.RightAccessWcf’ has zero application (non-infrastructure) endpoints.This might be because no configuration file was found for your application, or because no service element matching the service name could be found in the configuration file, or because no endpoints were defined in the service element.at System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription description) at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) at System.ServiceModel.ServiceHostBase.InitializeRuntime() at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at RightAccessHosting.RightAccessHost.OnStart(String[] args) in C:\\Users….

解决方案:

方案1:

我意识到这篇文章已经过时了,但是没有明显的解决方案,我只想介绍一下解决方法。

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

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

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

方案2:

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

对我来说就做到了。

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

方案3:

这对我有用。

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

方案4:

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

方案5:

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

方案6:

我得到了解决方案:

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"

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

方案7:

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

在此处输入图片说明

方案8:

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

打开服务属性,选择“ log on选项卡,然后选中“允许服务与桌面交互的选项”, 单击允许服务与桌面交互

方案9:

当您的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();
    }
}

方案10:

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

方案11:

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

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

该问题仍未解决。

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

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

方案12:

我收到此错误的原因是,我从这里误读了可接受的答案: 从可执行文件创建Windows服务

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

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

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

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

方案13:

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

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

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

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

方案14:

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

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

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

方案15:

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

您将在Path to executable文件的路径下看到一个文件夹路径,例如C:\\ Users \\ Me \\ Desktop \\ project \\ Tor \\ Tor \\ tor.exe

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

选择property , security , edit ,然后add 在文本字段中输入LOCAL SERVICE ,单击确定,然后选中FULL CONTROL

再次单击add ,然后输入NETWORK SERVICE ,单击ok ,选中FULL CONTROL

然后单击确定(在底部)

方案16:

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

方案17:

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

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

方案18:

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

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

方案19:

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

方案20:

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

方案21:

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

方案22:

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

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

我发现的其他解决方案:

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

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

舍洛普

方案23:

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

方案24:

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

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

方案25:

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

方案26:

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

此工具可让您监视流程的工作。 如果监视此服务过程,则应该在某处看到拒绝访问,并在拒绝访问的资源上看到拒绝访问。

方案27:

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

这就是全部了。

方案28:

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

方案29:

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

方案30:

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

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

参考连接:

https://stackoverflow.com/questions/4267051/4267051