2

我使用 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 运行应用程序时会创建此文件,但当我将应用程序作为服务运行时不会创建它。

  • 我已经阅读了许多网站,包括这个这个。不走运,我从这些站点尝试的所有内容仍然会产生拒绝访问错误。

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

4

1 回答 1

8

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

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

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

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

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

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

感谢大家审阅和回复这个问题。

于 2019-12-04T16:56:30.617 回答