我写了一个自动启动的c#Windows服务,它的工作主要是删除一些文本文件并修改父文件夹的上次写入时间。 当该程序第一次执行该工作时,该服务意外停止。 我检查系统的日志记录,但是无法从日志记录信息中定位错误代码。 所以我需要您的帮助!非常感谢!
这些是Exception信息,并且该异常发生于.NET Runtime:
System.IO .__ Error.WinIOError(Int32,System.String)处的System.IO.IOException(System.IO.FileStream.Init(System.String,System.IO.FileMode,System.IO.FileAccess,Int32,布尔值,System.IO.FileShare,Int32,System.IO.FileOptions,SECURITY_ATTRIBUTES,System.String,Boolean,Boolean,Boolean)位于System.IO.FileStream..ctor(System.String,System.IO.FileMode,System。 IO.FileAccess,System.IO.FileShare,Int32,System.IO.FileOptions,System.String,Boolean,Boolean,Boolean)位于System.IO.StreamWriter.CreateFile(System.String,Boolean,Boolean)。 System.IO.File中的StreamWriter..ctor(System.String,Boolean,System.Text.Encoding,Int32,Boolean)System.IO.File中的StreamWriter..ctor(System.String,Boolean,System.Text.Encoding)。位于WindowsService1.Service1 + <> c__DisplayClass5_0.b__0()的InternalAppendAllText(System.String,System.String,System.Text.Encoding)位于System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess( System.Threading.Tasks.Task)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()在WindowsService1.Service1 + d__5.MoveNext()在System.Runtime.CompilerServices.AsyncMethodBuilder + > c.b__6_1(System.Object)在System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean)在System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext ,位于System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()(位于System.Threading.ThreadPoolWorkQueue.Dispatch()处的System.Threading.ContextCallback,System.Object,布尔值)
上述异常发生后20秒,还有另一个错误显示错误模块路径为C:\ Windows \ system32 \ KERNELBASE.dll
答案 0 :(得分:0)
WindowsService1.Service1+<>c__DisplayClass5_0.b__0()
WindowsService1.Service1+d__5.MoveNext()
这两个堆栈条目实际上是您的应用程序的代码。顺便说一句,这是为项目指定非默认名称的一个好主意,如果将其命名为MyCompany.PreciousService
,您会注意到它们不是来自运行时。
您可能尚未编写这些<>c__DisplayClass5_0
或d__5
嵌套类。 C#编译器做了。这就是异步方法或通过yield return
了解转储的最简单方法-至少在调试版本中,将Service1.pdb
与Service1.exe
一起使用。您需要同时构建它们,不能先构建.exe,然后再使用另一个构建中的.pdb,则无法匹配。重现该问题,并且您应该在堆栈跟踪中看到源文件名和行号。