我有一个C#服务在我的开发环境中工作正常但是在我们尝试在我们的测试环境中构建它时崩溃而没有任何错误记录到我的日志文件或数据库中。我从Windows服务管理器获得的唯一线索是:
“本地计算机上的[我的服务]服务已启动然后停止。 如果某些服务未被其他服务使用,则会自动停止 服务或计划“。
当我们尝试从命令提示符运行服务来调试它时,它工作得很好。虽然我的日志文件没有任何错误消息,但有几个状态消息让我知道每个代码段执行时。幸运的是,代码似乎在两个状态消息之间失败,它们之间只有三行代码:
//line 1
AssemblyName myAssembly = Assembly.GetExecutingAssembly().GetName();
//line 2
log4net.GlobalContext.Properties["applicationName"] = string.Format("{0}, {1}",myAssembly.Name, myAssembly.Version);
//line 3
RequestWorkerThreadControlExtender.SetStarting();
我开始认为它与log4net用于获取第1行中的执行程序集的任何权限有关.Windows服务作为自定义服务帐户运行,但我们成功尝试通过命令运行代码提示以管理员身份运行我的服务帐户是否需要运行此代码的特殊权限?
在正常情况下,我会尝试在测试服务器中调试它,因为我无法在我的开发环境中重现错误。但是,我的工作场所对于在测试环境中构建非常严格。在构建该服务器之前,我必须让几个人签署我的代码,所以我更愿意在服务器之外调试,如果可能的话。 (事后看来,我应该尝试将命令提示符作为服务用户而不是管理员运行,但当时我没有想到这一点)。
作为参考,第3行引用的函数是:
public void SetStarting()
{
ControlSignal = ServiceControlSignal.STARTING;
}
如果有人对Assembly.GetExecutingAssembly().GetName();
所需的权限有任何想法,或者根据我目前的限制我如何调试这些权限,请告诉我。谢谢!