运行Windows Service时访问被拒绝

时间:2019-12-04 16:28:21

标签: c# asp.net-core .net-core asp.net-core-3.1

我已经使用ASP.Net Core 3.x和C#创建了Windows服务。构建项目时,我从新的Windows服务模板开始。从开发环境或控制台窗口运行它时,它运行良好。当我将其安装为Windows服务并尝试启动该服务时, “错误5:访问被拒绝。”错误。

我尝试了多种操作,下面将概述这些错误,以消除该错误,但似乎无济于事,因此我在sample下载了Microsoft提供的示例应用程序

相同的结果...当我在Visual Studio中运行示例应用程序时,它运行正常,当作为服务运行时,出现“访问被拒绝”错误。

  • 我正在管理员本地计算机上运行所有这些操作。

  • 我最初尝试使用默认的本地系统帐户运行它;出现“访问被拒绝”错误。 我更改了我的域帐户的登录名,即我用来登录到本地计算机的管理员帐户的同一帐户;出现相同的访问被拒绝错误。

  • 我的帐户具有设置为作为服务运行的特权。

  • 事件查看器仅显示一条消息“访问被拒绝”,没有其他消息被创建。

  • 我认为甚至在执行C#代码之前就发生了“拒绝访问”错误。让我相信的是,我在Program.Main .... File.WriteAllText("C:\\temp\\ws.log", $"Test of Worker Service @ {DateTime.Now}. Content Root Path: {AppContext.BaseDirectory}");的最上方添加了一行。我的帐户拥有对temp文件夹的完全访问权限。当我从Visual Studio运行应用程序时,将创建此文件,但当我将应用程序作为服务运行时,不会创建该文件。

  • 我已经阅读了许多网站,包括这个one和这个one。运气不好,我在这些站点上尝试的所有操作仍然会产生“访问被拒绝”错误。

我的想法已经用完了,希望这里有人可以给我答案。谢谢!

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,并相信我我真的很愚蠢!!

当我将其安装为服务时,仅将路径放入“ binPath”中。

sc create WindowsService1 binPath="C:\temp"

实际上我将可执行文件添加到binPath参数后,一切正常。

将其更改为sc create WindowsService1 binPath="C:\temp\WindowsService.exe"并且有效。

我知道这是一个Id10t错误,但是Microsoft应该确实为“ sc”命令提供更好的消息传递。诸如“找不到在binPath参数中指定的文件”之类的消息将非常有帮助。可以为我节省大约6个小时的工作。

感谢大家审阅并回答此问题。