0

我创建了一个应用程序作为 Windows 服务,它在运行 Windows 8 x64 的工作站上运行良好,并在 OnStart() 上的应用程序事件日志中写入了几个事件。我使用 InstallUtil 将它安装在 Windows 2012 机器上,它在启动后立即停止。我在事件日志中看到的唯一内容是在系统下:

The Foo service entered the stopped state. 
  • 如果不安装我不想做的 VS2012,我什至无法在该机器上调试它,因为它位于生产环境中。
  • 该应用程序依赖于一个本地复制的 DLL。
  • .NET Frameworks 2.0 到 4.5 安装在两台机器上。
  • 我尝试在兼容性下以管理员身份运行,但无论如何它都设置为在 LocalService 下运行,因此它应该有权执行其任务执行的所有操作...

编辑 1:你为什么要对这个问题投反对票,甚至不评论它为什么不好?

4

1 回答 1

1

我在调试 Windows 服务时学到的一些东西可能会帮助您解决问题。

  1. 尝试按照 Tim 在评论中的建议将 Windows 服务中每个方法的所有内容记录到文本文件中。
  2. 通过向应用程序域添加事件处理程序,尝试在服务退出之前捕获 UnhandledException。我有写入文本文件的日志函数。

    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException

    Public Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs)
            'Log and output exception message before the application exits.
            Dim exp = DirectCast(e.ExceptionObject, Exception)
            Dim formatexp = String.Format("Exception: {0}; Message: {1}: InnerException: {2}",
                              exp.ToString(),
                              exp.Message.ToString(),
                              exp.InnerException.ToString())
            Log(formatexp)
            Console.WriteLine(formatexp)
    
            Log("Application exited due to unhandled exception")
            Console.WriteLine("Service exited due to unhandled exception")
            'Exit the batch process gracefully.
            Environment.Exit(-1)
    End Sub
    
  3. 尝试使用 WindDbg 调试 Windows 服务崩溃或挂起问题,您可以从Microsoft 下载站点下载它。

  4. 检查尝试访问服务器上任何资源的服务帐户是否可以访问它们。

  5. 如果您想查看代码的实时执行,请将执行记录到 SignalR 主机。这可能是矫枉过正,但我​​曾经有多个线程执行不同的进程,我能够使用 SignalR 调试问题。

注意:如果您可以发布一些示例代码,那么这将有助于我们帮助您。

于 2013-08-22T14:20:52.057 回答