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

当我尝试启动在C#中创build的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'具有零应用程序(非基础设施)终结点。 这可能是因为没有为您的应用程序findconfiguration文件,或者是因为在configuration文件中找不到匹配服务名称的服务元素,或者是因为服务元素中没有定义端点。 System.ServiceModel.ServiceModel.ServiceHostBase.OnOpen()上的System.ServiceModel.ServiceHostBase.InitializeRuntime()中System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription说明,ServiceHostBase serviceHost)上的System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription说明) TimeSpan超时)在System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超时)在RightAccessHosting.RightAccessHost.OnStart(String [] args)在C:\用户….

我意识到这个post是旧的,但没有明显的解决scheme,我只是想抛出我如何解决这个问题。

第一个Error 5: Access Denied错误是通过给输出目录授予NETWORK SERVICE帐户来解决的。

第二个Started and then stopped错误似乎是一个通用的消息,当有问题的服务。 检查事件查看器(特别是“Windows日志”>“应用程序”)的真实错误消息。

在我的情况下,这是在app.config中的一个糟糕的服务configuration设置。

计算机 – >pipe理 – >服务 – > [你的服务]属性。 然后与帐户信息的选项卡。 玩这些设置,比如用pipe理员帐号等运行服务。

这是为我做的。

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

这对我有效。

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

我也得到了同样的错误,它通过右键单击服务>属性>login>login为:本地系统帐户解决。

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

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

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

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

由于您正在使用WCF,我猜测您正处于NETWORK SERVICE环境中。

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

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

这是一个工具,可以让你监视一个过程是什么。 如果你监视这个服务进程,你应该看到一个拒绝访问的地方,以及拒绝访问的资源。

在我的情况下,没有检查。

在这里输入图像说明

对于错误5,我做了上述解决scheme的相反。 “第一个错误5:访问被拒绝错误是通过给NETWORKSERVICE帐户授予对输出目录的权限解决的。”

我更改为本地帐户,而不是networking服务帐户,因为我是以pipe理员身份login的

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

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

我无意中将我的服务设置为以Local service解决scheme切换到Local System

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

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

我发现的其他解决scheme

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

     private void InitializeComponent() ... this.ServiceName = "DMTestService"; 
  • 而一个很好的服务器重新启动不会伤害

Szhlopp

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

我今天在这个问题上有了一个我正在开发的服务,在这个问题上没有任何其他的build议。 在我的情况下,我在服务运行的文件夹中有一个缺less的.dll依赖项。

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

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

我结束了所有的烫发到我的斌/debugging。

问题仍未解决。

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

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

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

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

您可以通过在服务安装程序的devise视图中进行更改来做到这一点:
服务进程安装程序的属性 – >将帐户设置为LocalSystem。

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

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

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

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

右键单击service.msc中的服务并selectproperty

您将在C:\ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe之类的Path to executable文件path下看到文件夹path

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

selectpropertysecurityedit ,然后add 。 在文本框中inputLOCAL SERVICE ,点击ok,然后选中FULL CONTROL

再次点击add ,然后进入NETWORK SERVICE ,点击ok ,勾选FULL CONTROL

然后点击确定(在底部)

我在一个我正在部署的服务上遇到了这个问题,在这个问题上没有任何其他的build议。 在我的情况下,这是因为我的.config(xml)无效。 从qualif复制到prod时,我做了一个复制和粘贴错误。

单击Start菜单并selectRun或使用Win + R的键盘快捷键。

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

在“ Administrator Properties对话框中,select“ Member Of选项卡,然后单击右下angular的“添加…”button。 从下一个对话框中selectAdvanced...

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