运行 Windows 服务时拒绝访问

Gen*_*e S 1 c# .net-core asp.net-core asp.net-core-3.1

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

我尝试了很多事情,我将在下面概述以消除错误,但似乎没有任何效果,所以我下载了 Microsoft 提供的示例应用程序,示例

相同的结果...当我从 Visual Studio 中运行示例应用程序时,它运行良好,作为服务运行时,我收到拒绝访问错误。

  • 我在我是管理员的本地机器上运行所有这些。

  • 我最初尝试使用默认的本地系统帐户运行它;收到拒绝访问错误。我将登录身份更改为我的域帐户,与我用来登录本地计算机的相同,该计算机是本机的管理员;得到相同的访问被拒绝错误。

  • 我的帐户具有作为服务运行的权限集。

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

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

  • 我看过很多网站,包括这一个,这一个。不走运,我从这些站点尝试的所有内容仍然会产生拒绝访问错误。

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

Gen*_*e S 5

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

当我将它安装为服务时,我只将路径放在“binPath”中。

sc create WindowsService1 binPath="C:\temp".

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

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

我知道这是一个 Id10t 错误,但微软确实应该为“sc”命令提供更好的消息传递。像“找不到 binPath 参数中指定的文件”这样的消息真的很有帮助。本来可以为我节省大约 6 个小时的工作时间。

感谢大家对这个问题的评论和回复。