2016-07-25 585 views
2

我构建了Topshelf示例应用程序(版本4.0.1),其中包含TimedEvents,它只写入控制台。 可以安装并以管理员身份运行。 当作为网络服务安装(试图用更少的权限运行更好的安全实践)了错误:Topshelf服务未启动访问被拒绝

[Success] Name Stuff, [Success] Description Sample Topshelf Host, [Success] ServiceName Stuff Topshelf v4.0.0.0, .NET Framework v4.0.30319.42000 Topshelf.Hosts.StartHost Error: 0 : The service failed to start., System.InvalidOperationException: Cannot start service Stuff on computer '.'. ---> System.ComponentModel.Win32Exception: Access is denied --- End of inner exception stack trace --- at System.ServiceProcess.ServiceController.Start(String[] args) at System.ServiceProcess.ServiceController.Start() at Topshelf.Runtime.Windows.WindowsHostEnvironment.StartService(String serviceName, TimeSpan startTimeOut) at Topshelf.Hosts.StartHost.Run()

在这种情况下,没有输入或输出文件,所以访问权限的其他文件不应该成为问题。

回答

2

原来,在这种情况下,即使没有文件权限来输入/输出照顾,可执行文件也需要适当的权限设置。该设置需要“读取+执行”。

这个问题是这样的答案在这里的变化:按照相应的步骤,以及对可执行文件设置权限(在我的bin/debug文件夹)和topshelf服务运行正常 Cannot Start Windows Service in NetworkService account

[Success] Name Stuff, [Success] Description Sample Topshelf Host, [Success] ServiceName Stuff Topshelf v4.0.0.0, .NET Framework v4.0.30319.42000 The Stuff service was started.

因此,在使用Topshelf即使,你还必须确保所有事情都设置了相应的服务运行。

我会推荐这种方法通过注册表编辑,或者只是运行所有服务作为LocalSystem,因为我已经看到在其他类似的Windows服务的权限问题的答案推荐。