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

当我尝试启动一个我在 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

我通过授予帐户 网络服务权限解决了上面的问题,但现在我有另一个问题:

alt text

更新 # 2

Service 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. 在 System.ServiceModel.Description. DispatcherBuilder. EnsureThereNonMexEndpoints (ServiceDescription 描述) 在 System.ServiceModel.Description. DispatcherBuilder.InitializeServiceHost (ServiceDescription,ServiceHostBase serviceHost) 在 System.ServiceModel.ServiceHostBase 在 System.ServiceModel.ServiceHostBase.OnOpen (TimeSpan 超时) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 在 C: Users... 中的 RightAccessHost.OnStart (String [] args)。

319976 次浏览

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

由于您正在使用 WCF,我猜测您是在网络服务的上下文。

见: http://support.microsoft.com/kb/256299

看看 http://www.sysinternals.comProcess Utilities > Process monitor

这个工具允许您监视流程的操作。如果您监视这个服务过程,您应该看到在某个地方拒绝了一个访问,并且在哪个资源上给出了被拒绝的访问。

我知道这篇文章很老了,但是没有明确的解决方案,我只是想告诉你我是如何解决这个问题的。

The first Error 5: Access Denied error was resolved by giving permissions to the output directory to the NETWORK SERVICE account.

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

在我的例子中,app.config 中的服务配置设置很糟糕。

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

电脑-> 管理-> 服务-> [你的服务]属性。 Then the the tab with the account information. Play with those settings, like run the service with administrator account or so.

我就是这么想的。

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

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

我更改了我的本地帐户,而不是网络服务帐户,因为我是作为管理员登录它的工作

这招对我很管用。

  1. 右键单击包含服务可执行文件的顶级文件夹。转到“属性”
  2. 打开“安全”选项卡
  3. 点击“编辑”
  4. 点击“ ADD”
  5. Enter the name "SYSTEM", click OK
  6. 突出显示系统用户,然后单击“完全控制”旁边的“允许”复选框
  7. Click OK twice

For me - the folder from which the service was to run, and the files in it, were encrypted using the Windows "Encrypt" option. Removing that and - voila!

如果您在服务器机器上遇到此错误,请尝试访问您得到的真正的 Windows 服务 exe 文件夹。您应该转到 security 选项卡并选择 LocalService 作为用户,并且应该提供完全访问权限。你也应该这样对待你的前任。

I have monitored sppsvc.exe using process monitor and found out that it was trying to write to the HKEY_LOCAL_MACHINE\SYSTEM\WPA key. After giving permissions to NETWORK SERVICE on this key, I was able to start the service and Windows suddenly recognized that it was activated again.

我也得到了相同的错误,它解决了 右键单击 Service > Properties > LogOn > Logon as: Local System Account。

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

After banging my had against my desk for a few hours trying to figure this out, somehow my "Main" method got emptied of it's code!

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

我发现的其他解决方案:

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

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
    
  • And a nice server restart doesn't hurt

Szhlopp

单击“ Start”菜单,选择“ Run”或使用“ Win + R”的快捷键。

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

Administrator Properties对话框中,选择 Member Of选项卡,然后单击右下角的 Add... 按钮。在下一个对话框中,选择 Advanced...

将出现另一个对话框。从那里点击右边的 Find Now。搜索结果列表将出现在对话框的底部。从该列表中选择 Network Services,并在每个打开的对话框上单击 OK

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

今天我在开发一个服务时遇到了这个问题,其他关于这个问题的建议都不起作用。就我而言,我失踪了。运行服务的文件夹中的 dll 依赖项。

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

我在部署的一个服务中遇到了这个问题,关于这个问题的其他建议都不起作用。对我来说,是因为。Config (xml)无效。我在从 qualif 复制到 prod 时出现了复制和粘贴错误。

确保 Path to executable指向一个实际的可执行文件(右键单击 service-> Properties-> General tab)。 通过 powershell (和 sc.exe) ,您可以安装一个服务,而无需将其指向一个实际的可执行文件..。

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

I ended up giving all the perms to my bin/Debug.

The issue was still not resolved.

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

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

In my case I kept the project on desktop and to access the desktop we need to add permission to the folder so I simply moved my project folder to C:\ directory now its working like a charm.

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

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

or by doing below change in in designer.cs file of your service installer:

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

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

enter image description here

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

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

右键单击 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,单击 ok,然后选中方框 FULL CONTROL

Click on add again then enter NETWORK SERVICE, click ok, check the box FULL CONTROL

然后点击确定(在底部)

In my case, I had to add 'Authenticated Users' in the list of 'Group or User Names' in the folder where the executable was installed.

我有办法了:

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"

现在你可以尝试开始服务了。

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

仅此而已。

我之所以会得到这个错误,是因为我误读了这里接受的答案: 从可执行文件创建 Windows 服务

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

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

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

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

一旦这样做了,我就能够运行服务,甚至通过网络服务帐户(在此之前,我只能运行与本地系统帐户)。

正如错误弹出窗口显示的那样,这与权限有关。因此,以“ LocalSystem”帐户运行服务。

要做同样的事情,右键单击 serviceProcessInstaller -> Properties -> Account并将其设置为 "LocalSystem",而不是默认的 "User"。安装服务,瞧。

检查 Windows 事件日志是否有详细的错误消息。我在检查事件日志后解决了同样的问题。

所有其他的回答都会谈到权限问题——考虑到错误消息所指的是权限问题,这是有意义的。

However, in my case, it was caused by a simple exception in my service code (System.IndexOutOfRangeException, but it could be anything).

因此,当发生这种错误时,应该查看他们的日志并寻找异常。