我使用 ASP.Net Core 3.x 和 C# 创建了一个 Windows 服务。我在构建项目时使用了新的 Windows 服务模板。当我从我的开发环境或控制台窗口运行它时,它运行良好。当我将它安装为 Windows 服务并尝试启动该服务时,我得到了一个 “错误 5:访问被拒绝。”错误。
我尝试了很多我将在下面概述的方法来消除错误但似乎没有任何效果所以我下载了 Microsoft 提供的示例应用程序,网址为 sample
相同的结果...当我从 Visual Studio 中运行示例应用程序时它运行良好,当作为服务运行时我收到拒绝访问错误。
我在我的本地机器上运行所有这些,我是这台机器的管理员。
我最初尝试使用默认的本地系统帐户运行它;得到拒绝访问错误。 我更改了登录为我的域帐户,与我用来登录本地机器的帐户相同,它是这台机器上的管理员;得到相同的拒绝访问错误。
我的帐户设置了作为服务运行的权限。
事件查看器只显示一条消息“拒绝访问”,不会创建其他消息。
我相信访问被拒绝错误甚至在 C# 代码执行之前就已发生。让我相信这是我在程序的最顶部添加了一行。Main....
File.WriteAllText("C:\\temp\\ws.log", $"Worker Service 测试@ {DateTime.Now}。内容根路径:{AppContext.BaseDirectory}");
。我的帐户对临时文件夹具有完全访问权限。当我从 Visual Studio 运行应用程序时创建此文件,但当我将应用程序作为服务运行时它不会创建。
我的想法已经用完了,希望这里有人能给我答案。谢谢!
最佳答案
我找到了解决方案,相信我,我觉得自己真的很蠢!!!
当我将它安装为服务时,我只将路径放在“binPath”中。
sc create WindowsService1 binPath="C:\temp"
。
一旦我将可执行文件实际添加到 binPath 参数中,一切正常。
将其更改为 sc create WindowsService1 binPath="C:\temp\WindowsService.exe"
并且成功了。
我知道这是一个 Id10t 错误,但 Microsoft 确实应该为“sc”命令提供更好的消息传递。像“找不到在 binPath 参数中指定的文件”这样的消息会很有帮助。本来可以节省我大约 6 个小时的工作时间。
感谢大家审阅和回复此问题。
关于c# - 运行 Windows 服务时拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59180558/