지난 며칠 동안 응용 프로그램의 일부로 심각한 문제가 발생합니다. 그것은 중간 규모의 ASP.NET 응용 프로그램입니다. 오류를 처리하는 일부 코드가 있습니다 (데이터베이스에 기록하고 오류 페이지를 사용자에게 표시합니다). 그러나 최근에이 코드는 일부 컴퓨터에서는 제대로 작동하지 않았습니다.방법으로 갈 때 액세스 위반 예외가 발생했습니다.
나는 ErrorViewer
에서 AccessViolationException
가 알고
Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: KERNELBASE.dll, version: 6.1.7601.17651, time stamp: 0x4e21213c
Exception code: 0xc0000005
Fault offset: 0x000000000000cacd
Faulting process id: 0x1150
Faulting application start time: 0x01cd1e44675765e2
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: c43403ad-8a37-11e1-b256-005056891270
이 오류는 때마다 응용 프로그램 오류 페이지를 표시하면 오류 뷰어에 기록됩니다. 그러나이 오류는 msi
설치 프로그램을 사용하여 배포 된 응용 프로그램에서만 발생하고 dll 파일은 암호화되므로이 응용 프로그램을 디버깅 할 수 없습니다. 조금 코드를 변경 나는 간단한 한 줄에 초기 방법을 리팩토링 :
Public Shared Function HandleException(ByVal exception As System.Exception) As Guid
Return New GUID
End Function
하지만 여전히이 방법을 입력하면 나에게 이상한 듯이 스택 트레이스와 예외 (DebugDiag 1.2을 사용하여 얻은)
at (Exception)
at MyApp.Business.Utilities.HandleException(Exception exception)
at()
at MyApp.BaseUtilities.ErrorSolution()
at (ErrorPage_errorpage , Object , EventArgs)
at MyApp.ErrorPage_errorpage.Page_Load(Object , EventArgs)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
을 throwed . 그런 다음이 메서드 호출을 제거하고 갑자기 응용 프로그램이 올바르게 작동하기 시작했으나 오류는 처리하지 않았습니다. 문제는 정확히 몇 년 동안 똑같은 코드가 작동했는지, 약간 변경되지 않았으며 일부 컴퓨터에서 작업을 중단 한 것입니다.
더욱 흥미로운 점은 위에 설명 된 단순한 GUID를 반환하는 간단한 메서드로 호출하면 AccessViolation
을 던질 수 있다는 것입니다.
누구나 응용 프로그램에서 비슷한 문제가 있었습니까? 누군가 이런 일이 왜 일어나는지 설명 할 수 있을까요?
예외가 발생하면 어떤 종류의 로그를 쓰려고합니까? 그렇다면 로그 폴더에 windows 권한이있는 문제 일 수 있습니다. – Habib
아니요, 아니에요, 확인했습니다. 설명에서 언급 한 것처럼 : 메서드가 아무 것도하지 않고 새로운 GUID를 반환하는 경우에도 예외가 throw됩니다. 아무것도 더. – Pako
WebPages v1.0을 수동으로 "C : \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET Web Pages \ v1.0의 해당 폴더에 복사하여"설치하려고 시도한 후에도 동일한 예외가 발생했습니다. GAC에 삽입). 내 프로젝트는 단순히 IIS의 모든 버전을 충돌시키기 시작했습니다. 분명히이 설치 프로그램을 설치하는 설치 프로그램이 없기 때문에 제가했습니다. :( – user2173353