服务安装正确,但尝试通过net start
或从服务窗口启动服务时,服务无法启动,甚至无法访问OnStart
处理程序。除非使用管理员帐户,否则Windows服务不会启动OnStart
如果我使用管理员帐户,服务启动并正常工作。这似乎表明服务中的某些内容需要管理员权限,但这纯粹是一种随需应变式服务,在请求之前不会执行任何操作。对于这种类型的服务,我认为至少应该启动,然后在发出请求需要管理员权限的请求时失败。
调试是不可能的,因为我甚至无法启动它,除了信息日志指出服务已停止外,没有任何事件显示在事件日志中。有太多的代码在服务这里要补充这一切,但入口点是一个相当标准的统一式服务:
partial class MyServiceHost : UnityServiceBase
{
private Bootstrapper _bootstrapper;
public MyServiceHost()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
TextWriter tw = new StreamWriter("ServiceTestLog.txt");
tw.Write("Date: " + DateTime.Now + "\n");
try
{
base.OnStart(args);
_bootstrapper = new Bootstrapper(UnityContainer);
_bootstrapper.Run();
}
catch (Exception ex)
{
tw.Write(ex.ToString());
}
tw.Close();
}
protected override void OnStop()
{
_bootstrapper.Teardown();
base.OnStop();
}
}
出于商业考虑,我不能只让用户帐户它使用的是管理员,所以我” d感谢有关如何解决此问题的任何建议。
请参阅Steve Townsend的答案,但为什么它需要成为一项服务?它做了什么,它不能像正常的分离过程那样运行? –
@CareyGregory这只是我们代码库整个服务导向架构的一小部分。没有包括为什么它必须是服务的所有细节,我只是说我在这件事上没有选择! – peacemaker
运行sysinternals processmonitor(https://technet.microsoft.com/en-us/sysinternals/bb896645)并查看失败情况。它可能会在所需的依赖项上获得“拒绝访问”。 –