VB.NET Windows服务适用于Win8x64,但不适用于Win2012

时间:2013-08-21 20:12:40

标签: .net vb.net windows-services windows-server windows-server-2012

我创建了一个应用程序作为Windows服务,它可以在运行Windows 8 x64的工作站上正常工作,并在OnStart()上的应用程序事件日志中写入多个事件。我使用InstallUtil将它安装在Windows 2012计算机上,并在启动后立即停止。我在事件日志中唯一看到的是System:

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

编辑1:为什么你甚至不留下一个关于它为什么不好的评论的问题呢?

1 个答案:

答案 0 :(得分:1)

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

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

    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 Download site下载。

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

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

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