我构建了Topshelf示例应用程序(版本4.0.1),该应用程序是一个只写入控制台的TimedEvents。 可以安装并以管理员身份运行。 当安装为NetworkService(尝试以较少的权限运行以获得更好的安全性实践)时出现错误:
[Success] Name Stuff,[Success]描述示例Topshelf Host, [Success] ServiceName Stuff Topshelf v4.0.0.0,.NET Framework v4.0.30319.42000 Topshelf.Hosts.StartHost错误:0:服务 无法启动。,System.InvalidOperationException:无法启动 服务电脑上的东西'。'。 ---> System.ComponentModel.Win32Exception:访问被拒绝---结束 内部异常堆栈跟踪--- at System.ServiceProcess.ServiceController.Start(String [] args)at System.ServiceProcess.ServiceController.Start()at Topshelf.Runtime.Windows.WindowsHostEnvironment.StartService(字符串 serviceName,TimeSpan startTimeOut)at Topshelf.Hosts.StartHost.Run()
在这种情况下,没有输入或输出文件,因此对其他文件的访问权限应该不是问题。
答案 0 :(得分:2)
事实证明,在这种情况下,即使没有输入/输出的文件权限来处理,可执行文件也需要设置适当的权限。设置需要"读取+执行"。
此问题是此答案的变体: Cannot Start Windows Service in NetworkService account
按照那里的步骤,设置可执行文件的权限(在我的情况下是bin / debug文件夹)和topshelf服务运行正常。
[Success] Name Stuff,[Success]描述示例Topshelf Host, [Success] ServiceName Stuff Topshelf v4.0.0.0,.NET Framework v4.0.30319.42000 Stuff服务已经启动。
因此,即使使用Topshelf,您仍然必须确保其他所有内容都已正确设置才能运行该服务。
我建议这种方法优于注册表编辑,或者只是将所有服务作为LocalSystem运行,正如我在Windows服务的类似权限问题的其他答案中所推荐的那样。