我已经使用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运行应用程序时,将创建此文件,但当我将应用程序作为服务运行时,不会创建该文件。
我的想法已经用完了,希望这里有人可以给我答案。谢谢!
答案 0 :(得分:1)
我找到了解决方案,并相信我我真的很愚蠢!!
当我将其安装为服务时,仅将路径放入“ binPath”中。
sc create WindowsService1 binPath="C:\temp"
。
实际上我将可执行文件添加到binPath参数后,一切正常。
将其更改为sc create WindowsService1 binPath="C:\temp\WindowsService.exe"
并且有效。
我知道这是一个Id10t错误,但是Microsoft应该确实为“ sc”命令提供更好的消息传递。诸如“找不到在binPath参数中指定的文件”之类的消息将非常有帮助。可以为我节省大约6个小时的工作。
感谢大家审阅并回答此问题。