Windows handler error

Here are several techniques for how to handle Windows Service errors to make it easy for operations teams to quickly identify the root cause of a problem.

This is part of a series on creating and installing Windows services.

  1. How to Create a Windows Service
  2. How to Install a Windows Service
  3. How to Run a Windows Service from Visual Studio
  4. How to Avoid Windows Service Start-up Timeouts
  5. How to Make a Windows Service Install Itself
  6. How to Handle Windows Service Errors
  7. How to Build a Windows Service Framework

In our first two episodes, we saw that the Service Control Manager automatically logs service lifecycle events (start/stop) to the Windows Event Log. But, what happens if our service encounters an unexpected error and crashes during its run? We want to make it as easy as possible for our operations team to quickly identify the root cause of the problem.

To start, let’s build a service based on the infrastructure we have created over the past couple episodes. To test how our infrastructure reacts in the face of errors, we will intentionally make the service rather poorly behaved:

class Program
{
    public const string Name = "DemoService";

    static void Main(string[] args)
    {
        BasicServiceStarter.Run<MyService>(Name);
    }
}

class MyService : IService
{
    public void Start()
    {
        throw new Exception("exception!");
    }
    
    public void Dispose()
    {
    }
}

If we run this service from the console, you will notice that even without any special error handling in place, the exception is printed out to the console by the framework:

EntryThreadExceptionInConsole

If you go ahead and install this service, we can experiment with how it behaves when running in service mode. If we start the service via services.msc, we get the following pop-up immediately:

ServiceStartedAndthenStopped

And the service, as we would expect, did not start successfully. If we instead use net start to start the service, we get the following message:

NetStartServiceDidNotReportAnError

Notably, when using either method, the Service Control Manager isn’t really telling us anything useful about what happened, and it seems to not even know that there was an error during start-up. However, if we look at the event viewer, we notice that there is a useful error message there:

EntryThreadExceptionInEventLog

The framework has kindly gone ahead and logged the issue for us, even using the logger named after the service.

What happens if there is an unhandled exception thrown on a different thread? We know that those will tear down the application as well. Let’s experiment by modifying our misbehaving service to throw on a background thread instead of the main thread:

class MyService : IService
{
    public void Start()
    {
        ThreadPool.QueueUserWorkItem(
            o => { throw new Exception("exception!"); });
    }
    
    public void Dispose()
    {
    }
}

Repeating our experiments, we now see the following behavior when running from the console:

BackgroundThreadExceptionInConsole

Which is pretty similar to what happened when we threw an exception on the main thread. When starting this service, we get the following slightly different (and more useful) message from services.msc:

ProcessTerminatedUnexpectedly

And the following messages in the event viewer:

BackgroundThreadExceptionInEventLogDefault

Unfortunately, none of these messages display the message associated with the exception that was thrown, although we do get the stack trace.

In both console mode and service mode, the framework already leaves a decent paper trail in the event of an unhandled exception. Any improvements we make should not eliminate this default behavior (by masking exceptions via try/catch, for example).

There are three major shortcomings of the default behavior:

  1. In the event of an exception on the main thread during service start-up, the service controller does not seem to know that there was a failure, and reports a vague error.
  2. In the event of a background thread exception, the error written to the event log does not contain the exception message.
  3. We are not capturing fatal exceptions for the purpose of logging them to log4net (you are using log4net, right?)

Report start-up errors to the Service Control Manager

To handle this issue, we need to set the service’s ExitCode property to a non-zero value in the face of a start-up error. To do so, we must wrap our OnStart method in a try/catch:

public class BasicService<T> : ServiceBase where T : IService, new()
{
    private IService _service;

    protected override void OnStart(string[] args)
    {
        try
        {
            _service = new T();
            _service.Start();
        }
        catch
        {
            ExitCode = 1064;
            throw;
        }
    }

    protected override void OnStop()
    {
        _service.Dispose();
    }
}

I have chosen error 1064 : “An exception occurred in the service when handling the control request” because it seems to be the most appropriate (if anyone has a better idea of what we should set the error to, please leave a note in the comments). Also note that we re-throw the exception, thus preserving the existing behaviors (including the event logging) we saw above. If we start our service with this change in place, services.msc gives us a much more useful message, indicating that the service not only stopped, but failed:

ServiceStartFailure

Write background thread exception messages to the event log

To accomplish this goal, we need to attach to the current AppDomain’s UnhandledException event:

public static class BasicServiceStarter
{
    public static void Run<T>(string serviceName) where T : IService, new()
    {
        AppDomain.CurrentDomain.UnhandledException += (s, e) =>
            {
                if (EventLog.SourceExists(serviceName))
                {
                    EventLog.WriteEntry(serviceName,
                        "Fatal Exception : " + Environment.NewLine +
                        e.ExceptionObject, EventLogEntryType.Error);
                }
            };

In our handler, we write a custom error message to the event log that will include the message associated with the exception (taking advantage of the default behavior of Exception.ToString). With this change, we will be able to see a bit more information in the event log when our service crashes due to an exception on a non-entry thread:

BackgroundThreadExceptionInEventLog

Log all errors to log4net

It is a good idea to log any error that takes down the application as a fatal error in our application logs. To accomplish this, we will need to add logging to both the error handlers we created above (both the AppDomain.UnhandledException event handler and the catch block in our ServiceBase.OnStart method). We have to do both because an unhandled exception in ServiceBase.OnStart is actually handled by the service controller and does not trigger firing of the AppDomain.UnhandledException event. Adding logging calls to these two locations is left as an exercise to the reader.

This feels like a question that has probably been asked before but I couldn’t find it so am asking (possibly again).

I’m writing a windows service to do a bit of file monitoring and processing. Its all doing what I want but I am aware that there are several places that my code might throw errors when doing read/writes to the file system or event log. I’m goign to put in some try/catches where I expect there to be errors but I was wanting to do some global error handling to pick up all those unforseen problems. I’m not sure how to do this though.

My first thought was to look for some kind of global error handler similar to what I find in ASP.NET projects but couldn’t see anything along these lines.

The other thought was that I could just get all my top level function calls and put a try/catch around them. As I see it that would mean putting a try/catch around all my event handler code and my service Start and Stop methods. This doesn’t feel like a good way of doing it so I’m thinking I’m probably approaching this in the wrong way. Can anybody suggest what I should be doing in terms of error handling?

I assume that in a service I don’t want it to just throw errors because it will potentially stop the service or should I in fact be letting the service collapse and automatically restarting it through teh recovery mechanism I’ve seen mentioned?

I’m very uncertain here so please share your wisdom with me… :)

asked Jul 12, 2010 at 15:14

Chris's user avatar

There is no problem in putting a try/catch in the main method of the service and log the errors so you can fix them. If the error caught is unexpected then you may close the service cleanly.

Also, besides the main try/catch, you will have to add a try/catch for every potential exceptions that you cannot avoid to happen (i.e. network issues) so you can act accordingly in order to restore the correct behavior of the application, avoiding the service to crash.

Finally, keep in mind that you will have to do this for every top-method of every distinct thread you have, because the exceptions are not propagated outside the scope of a thread.

answered Jul 12, 2010 at 15:28

David Espart's user avatar

David EspartDavid Espart

11.4k7 gold badges36 silver badges50 bronze badges

We’ve used this successfully in many Windows services we’ve written over the years.

We always have the functionality in a dll. In the service when we instantiate and run the function in the dll we wrap the call in a try/catch. Then the service can log or respond to any unforseen exceptions that are thrown.

You would, of course, wrap suspect code in the dll in try/catch blocks and do what is appropriate there as well.

answered Jul 12, 2010 at 15:30

Walter's user avatar

WalterWalter

2,5422 gold badges32 silver badges38 bronze badges

2

A service should never fail. Usually things in a service are triggered by an event (network call or timer)… The code that runs for each event should be in a try catch, such that the service never goes down.

I suggest logging to the EventLog for Errors and other crucial information. You could use log4net + the EventLogAppender for doing that.

It can still happen, that the service goes down because of hardware problems like full disks or memory issues. If you want it to restart automatically you can set the recovery in the NT Service Options Dialog or in the Installer.

answered Jul 12, 2010 at 15:40

Lars Corneliussen's user avatar

+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1360 March 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1360 March 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1687 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1687 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1319 March 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1319 March 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1666 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1666 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1665 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1665 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT Server
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT Server
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT 4 Service Pack 6
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT 4 Service Pack 6
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows 2000 Server
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows 2000 Server
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT 4.0
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT 4.0
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система WIndows 2000 Professional
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система WIndows 2000 Professional
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows XP Professional
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual C++.net Standard Version 2002
Компания Microsoft
Операционная система Windows XP Professional
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1737 July 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1737 July 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe a70891da4a5a9095b3825b8867d22343 6.50 KB
Application MSDN Disc 2321 July 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 a70891da4a5a9095b3825b8867d22343
Контрольная сумма SHA1 8debdc585f41ccbf4a6b62022a694df378685498
CRC32: aaf4d2ed
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 488a547299d420536576c6516cc97772 6.00 KB
Application MSDN Disc 2321 July 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 488a547299d420536576c6516cc97772
Контрольная сумма SHA1 7852987b5a950098e86c688196ae89610fcb4d82
CRC32: efc3da55
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 2e006c9238ea85fdcdad2b34800bdc82 8.50 KB
Application MSDN Disc 2321 July 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 2e006c9238ea85fdcdad2b34800bdc82
Контрольная сумма SHA1 3ce55855473ae7a66134cc4aa042f61749b33adb
CRC32: c6155c50
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1796 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1796 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1796 September 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1796 September 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 5f63b6af170ea2d82a5448e46f196903 6.00 KB
Application MSDN Disc 1996 and 1997 February 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 5f63b6af170ea2d82a5448e46f196903
Контрольная сумма SHA1 bde9455a2663a990399857182f349217fca41021
CRC32: 1346772c
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 58092bbccaf0ef9ad2447ea8fdf77069 6.50 KB
Application MSDN Disc 1996 and 1997 February 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 58092bbccaf0ef9ad2447ea8fdf77069
Контрольная сумма SHA1 af119c864a917a9bc13fa8bd971390e4844ccca2
CRC32: 606916c9
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 6f1cdf9d577f30d757b5d48c46d14392 8.50 KB
Application MSDN Disc 1996 and 1997 February 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 6f1cdf9d577f30d757b5d48c46d14392
Контрольная сумма SHA1 128d12087ca03877f0024301990c20492e6c5cae
CRC32: cfef0514
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 095fadc6338a3670650f723738c6f0b7 8.50 KB
Application Msdn Disc 1936 and 1937 January 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 095fadc6338a3670650f723738c6f0b7
Контрольная сумма SHA1 fa73642792947db7f049f4b6a6dc8ec2dd9e330a
CRC32: 37843da8
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cea0f6027f8f9d73f8717e116f86b125 6.50 KB
Application Msdn Disc 1936 and 1937 January 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cea0f6027f8f9d73f8717e116f86b125
Контрольная сумма SHA1 e9f8c9b9d1b4dfd31d49baa192de739973c95e65
CRC32: aaddb1ad
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 5d7aff16b49105a00de4aec6f652b789 6.00 KB
Application Msdn Disc 1936 and 1937 January 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 5d7aff16b49105a00de4aec6f652b789
Контрольная сумма SHA1 6fc1805ca7c5a92f5d1e0e7435ed193223eaae84
CRC32: 6c92e583
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows NT
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows NT
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows NT
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows 2000 SP3
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows 2000 SP3
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows 2000 SP3
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows 98
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows 98
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Visual Studio.net Enterprise Architect 2003
Компания Microsoft
Операционная система Windows 98
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Visual Studio. NET Integrated Development Environment 2003 2003
Компания Lahey Computer Systems Inc.
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Visual Studio. NET Integrated Development Environment 2003 2003
Компания Lahey Computer Systems Inc.
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Visual Studio. NET Integrated Development Environment 2003 2003
Компания Lahey Computer Systems Inc.
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Visual C++.net 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Visual C++.net 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Visual C++.net 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Windows Server 2003 Developer Readiness Guide 2003
Компания Microsoft
Операционная система Windows Server 2003
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Windows Server 2003 Developer Readiness Guide 2003
Компания Microsoft
Операционная система Windows Server 2003
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Windows Server 2003 Developer Readiness Guide 2003
Компания Microsoft
Операционная система Windows Server 2003
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Windows Server 2003 Developer Readiness Guide 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Windows Server 2003 Developer Readiness Guide 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Windows Server 2003 Developer Readiness Guide 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows NT 4 Service Pack 6
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows NT 4 Service Pack 6
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows NT 4.0
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows NT 4.0
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual Studio.net Professional 2002
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe fcb717e17162a794f0145e78d9ee78ce 8.50 KB
Application Microsoft Visual Studio.net 2002
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 8704
MD5 fcb717e17162a794f0145e78d9ee78ce
Контрольная сумма SHA1 aa07b8be0e2b3fdec0d60a8dec6e30be25f9d4db
CRC32: 9c8fb4b2
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe dfa6f87b2d9b2985e41e8d5130823def 6.50 KB
Application Microsoft Visual Studio.net 2002
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 6656
MD5 dfa6f87b2d9b2985e41e8d5130823def
Контрольная сумма SHA1 99a3e62d8276f97a53f5d8d1f14c1d62dc14bdcf
CRC32: 40407977
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe fcb717e17162a794f0145e78d9ee78ce 8.50 KB
Application Microsoft Visual Studio.net 2002
Компания Microsoft
Операционная система Windows NT 4.0
Архитектура 64-разрядная (x64)
KB 8704
MD5 fcb717e17162a794f0145e78d9ee78ce
Контрольная сумма SHA1 aa07b8be0e2b3fdec0d60a8dec6e30be25f9d4db
CRC32: 9c8fb4b2
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe dfa6f87b2d9b2985e41e8d5130823def 6.50 KB
Application Microsoft Visual Studio.net 2002
Компания Microsoft
Операционная система Windows NT 4.0
Архитектура 64-разрядная (x64)
KB 6656
MD5 dfa6f87b2d9b2985e41e8d5130823def
Контрольная сумма SHA1 99a3e62d8276f97a53f5d8d1f14c1d62dc14bdcf
CRC32: 40407977
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe fcb717e17162a794f0145e78d9ee78ce 8.50 KB
Application Microsoft Visual Studio.net 2002
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 8704
MD5 fcb717e17162a794f0145e78d9ee78ce
Контрольная сумма SHA1 aa07b8be0e2b3fdec0d60a8dec6e30be25f9d4db
CRC32: 9c8fb4b2
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe dfa6f87b2d9b2985e41e8d5130823def 6.50 KB
Application Microsoft Visual Studio.net 2002
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 6656
MD5 dfa6f87b2d9b2985e41e8d5130823def
Контрольная сумма SHA1 99a3e62d8276f97a53f5d8d1f14c1d62dc14bdcf
CRC32: 40407977
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN 2435.2 April 2004
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN Disc 2435.1 December 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN Disc 2435.1 December 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN Disc 2435.1 December 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 095fadc6338a3670650f723738c6f0b7 8.50 KB
Application MSDN Disc 1952 January 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 095fadc6338a3670650f723738c6f0b7
Контрольная сумма SHA1 fa73642792947db7f049f4b6a6dc8ec2dd9e330a
CRC32: 37843da8
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cea0f6027f8f9d73f8717e116f86b125 6.50 KB
Application MSDN Disc 1952 January 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cea0f6027f8f9d73f8717e116f86b125
Контрольная сумма SHA1 e9f8c9b9d1b4dfd31d49baa192de739973c95e65
CRC32: aaddb1ad
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 5d7aff16b49105a00de4aec6f652b789 6.00 KB
Application MSDN Disc 1952 January 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 5d7aff16b49105a00de4aec6f652b789
Контрольная сумма SHA1 6fc1805ca7c5a92f5d1e0e7435ed193223eaae84
CRC32: 6c92e583
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual Basic.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual Basic.net Standard Version 2002
Компания Microsoft
Операционная система Windows NT
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual Basic.net Standard Version 2002
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual Basic.net Standard Version 2002
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Microsoft Visual Basic.net Standard Version 2002
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Microsoft Visual Basic.net Standard Version 2002
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN Disc 2088 May 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN Disc 2088 May 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN Disc 2088 May 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Attendee Portfolio Microsoft Windows Server 2003 and Microsoft Visual Studio .net 2003
Компания Microsoft
Операционная система Windows Server 2003 Enterprise Edition
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Attendee Portfolio Microsoft Windows Server 2003 and Microsoft Visual Studio .net 2003
Компания Microsoft
Операционная система Windows Server 2003 Enterprise Edition
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Attendee Portfolio Microsoft Windows Server 2003 and Microsoft Visual Studio .net 2003
Компания Microsoft
Операционная система Windows Server 2003 Enterprise Edition
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1336 March 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1336 March 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1667 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1667 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN Disc 2435.5 September 2005
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN Disc 2435.5 September 2005
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN Disc 2435.5 September 2005
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN Disc 2221 June 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN Disc 2221 June 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN Disc 2221 June 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN Disc 2313 July 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN Disc 2313 July 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN Disc 2313 July 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 3d194ef3f0fce9e8c7f6b2e8f8e483a5 7.00 KB
Application MSDN Disc 0931 July 2001
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 7168
MD5 3d194ef3f0fce9e8c7f6b2e8f8e483a5
Контрольная сумма SHA1 e535914251220798660df6e20aded07c0227717b
CRC32: 9a7672fc
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe db2b207ca8c0ff9fff6f20aef032a706 5.50 KB
Application MSDN Disc 0931 July 2001
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 5632
MD5 db2b207ca8c0ff9fff6f20aef032a706
Контрольная сумма SHA1 3a9f3f454bc8a1f05fdda219489652a80a3bb932
CRC32: 34a3198c
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 3d194ef3f0fce9e8c7f6b2e8f8e483a5 7.00 KB
Application MSDN Disc 0955 August 2001
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 7168
MD5 3d194ef3f0fce9e8c7f6b2e8f8e483a5
Контрольная сумма SHA1 e535914251220798660df6e20aded07c0227717b
CRC32: 9a7672fc
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe db2b207ca8c0ff9fff6f20aef032a706 5.50 KB
Application MSDN Disc 0955 August 2001
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 5632
MD5 db2b207ca8c0ff9fff6f20aef032a706
Контрольная сумма SHA1 3a9f3f454bc8a1f05fdda219489652a80a3bb932
CRC32: 34a3198c
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 3d194ef3f0fce9e8c7f6b2e8f8e483a5 7.00 KB
Application Microsoft Visual Studio.net .net Framework Beta 2 Part 098-92078
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 7168
MD5 3d194ef3f0fce9e8c7f6b2e8f8e483a5
Контрольная сумма SHA1 e535914251220798660df6e20aded07c0227717b
CRC32: 9a7672fc
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe db2b207ca8c0ff9fff6f20aef032a706 5.50 KB
Application Microsoft Visual Studio.net .net Framework Beta 2 Part 098-92078
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 5632
MD5 db2b207ca8c0ff9fff6f20aef032a706
Контрольная сумма SHA1 3a9f3f454bc8a1f05fdda219489652a80a3bb932
CRC32: 34a3198c
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 3d194ef3f0fce9e8c7f6b2e8f8e483a5 7.00 KB
Application MSDN Visual Studio.net .net Framework Beta 2 1987-2001
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 7168
MD5 3d194ef3f0fce9e8c7f6b2e8f8e483a5
Контрольная сумма SHA1 e535914251220798660df6e20aded07c0227717b
CRC32: 9a7672fc
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe db2b207ca8c0ff9fff6f20aef032a706 5.50 KB
Application MSDN Visual Studio.net .net Framework Beta 2 1987-2001
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 5632
MD5 db2b207ca8c0ff9fff6f20aef032a706
Контрольная сумма SHA1 3a9f3f454bc8a1f05fdda219489652a80a3bb932
CRC32: 34a3198c
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application Visual Basic.net Standard 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application Visual Basic.net Standard 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows Server 2003
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows Server 2003
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows Server 2003
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows XP Home
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows XP Home
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows XP Home
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows 2000 Server
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows 2000 Server
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система Windows 2000 Server
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система WIndows 2000 Professional
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система WIndows 2000 Professional
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft Visual Studio.net Professional Upgrade 2003
Компания Microsoft
Операционная система WIndows 2000 Professional
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Lotus Approach 3.0 3.0
Компания Lotus Development Corporation
Операционная система IBM
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Lotus Approach 3.0 3.0
Компания Lotus Development Corporation
Операционная система IBM
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Lotus Approach 3.0 3.0
Компания Lotus Development Corporation
Операционная система IBM
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Lotus Approach 3.0 3.0
Компания Lotus Development Corporation
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Lotus Approach 3.0 3.0
Компания Lotus Development Corporation
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Lotus Approach 3.0 3.0
Компания Lotus Development Corporation
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application MSDN Disc 2435.4 May 2005
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application MSDN Disc 2435.4 May 2005
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application MSDN Disc 2435.4 May 2005
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 0993bbfbeadaf6479a27c231cde6dfc5 8.50 KB
Application MSDN Disc 1664 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 0993bbfbeadaf6479a27c231cde6dfc5
Контрольная сумма SHA1 e453876271407e16457f8d3a4eb9b51f6d5f2e79
CRC32: 7d3c75a3
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 88681d045d163cbb8c30dfcaead86e48 6.50 KB
Application MSDN Disc 1664 November 2002
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 88681d045d163cbb8c30dfcaead86e48
Контрольная сумма SHA1 73cca17face921a1aeb71b6c5dea691fd60eb324
CRC32: 878c58c6
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application msdn Disc 2435 c. October 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application msdn Disc 2435 c. October 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application msdn Disc 2435 c. October 2003
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 2000 SP4
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 2000 SP4
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 2000 SP4
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 2000
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows XP
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe cd6b69d6ea8283a281f04a25c0312788 6.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6656
MD5 cd6b69d6ea8283a281f04a25c0312788
Контрольная сумма SHA1 bb58f7b117d7a1c4acef433c288d611e3269e12e
CRC32: 38a1790b
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe f0561934f5ac0e7d1badce108a59dcbc 8.50 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 8704
MD5 f0561934f5ac0e7d1badce108a59dcbc
Контрольная сумма SHA1 9c9d1ccb14e1e75ec6d04817af1097a6ae4290eb
CRC32: dbac8938
Расположение каталога файлов C:WindowsSystem32
+ ErrorHandler.exe 692713fc07c2f7d1d77a792576a2f431 6.00 KB
Application Microsoft English 2004 2004
Компания Microsoft
Операционная система Windows 10
Архитектура 64-разрядная (x64)
KB 6144
MD5 692713fc07c2f7d1d77a792576a2f431
Контрольная сумма SHA1 223ecd0ec6b2a19fe42eb285ce44993c9cacd026
CRC32: 9916bed0
Расположение каталога файлов C:WindowsSystem32

Tutorial built with .NET 6.0

Other versions available:

  • .NET: .NET 5.0, ASP.NET Core 3.1
  • Next.js: Next.js 11

This is a quick post to show how to implement a global exception handler in .NET 6.0.

These are the main pieces involved in the error handling process that we’ll cover in this tutorial:

  • Global Error Handler Middleware — custom middleware that catches all exceptions and determines which HTTP response code to return based on the exception type.
  • App Exception — a custom exception class to differentiate between handled exceptions thrown by application code and unhandled exceptions thrown by the .NET framework.
  • Program.cs — the entry point to the .NET 6 app, it adds the global error handler middleware to the application request pipeline.
  • Example Error Throwing Service — an example service that shows how to throw application exceptions that will be handled by the global error handler.

The below code snippets are taken from a .NET API tutorial I posted recently, for the full tutorial or to download and test the code locally see .NET 6.0 — User Registration and Login Tutorial with Example API.

.NET Global Error Handler Middleware

The global error handler is used catch all errors and remove the need for duplicated error handling code throughout the .NET api. It’s configured as middleware in the configure HTTP request pipeline section of the Program.cs file.

Errors of type AppException are treated as custom (app specific) errors that return a 400 Bad Request response, the .NET built-in KeyNotFoundException class is used to return 404 Not Found responses, all other exceptions are unhandled and return a 500 Internal Server Error response.

See the example service for examples of how to throw an AppException or KeyNotFoundException that will be handled by this error handler middleware.

namespace WebApi.Helpers;

using System.Net;
using System.Text.Json;

public class ErrorHandlerMiddleware
{
    private readonly RequestDelegate _next;

    public ErrorHandlerMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception error)
        {
            var response = context.Response;
            response.ContentType = "application/json";

            switch(error)
            {
                case AppException e:
                    // custom application error
                    response.StatusCode = (int)HttpStatusCode.BadRequest;
                    break;
                case KeyNotFoundException e:
                    // not found error
                    response.StatusCode = (int)HttpStatusCode.NotFound;
                    break;
                default:
                    // unhandled error
                    response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    break;
            }

            var result = JsonSerializer.Serialize(new { message = error?.Message });
            await response.WriteAsync(result);
        }
    }
}

.NET App Exception

The app exception is a custom exception class used to differentiate between handled and unhandled exceptions in the .NET API. Handled exceptions are generated by application code and used to return friendly error messages, for example business logic or validation exceptions caused by invalid request parameters, whereas unhandled exceptions are generated by the .NET framework or caused by bugs in application code.

namespace WebApi.Helpers;

using System.Globalization;

// custom exception class for throwing application specific exceptions (e.g. for validation) 
// that can be caught and handled within the application
public class AppException : Exception
{
    public AppException() : base() {}

    public AppException(string message) : base(message) { }

    public AppException(string message, params object[] args) 
        : base(String.Format(CultureInfo.CurrentCulture, message, args))
    {
    }
}

.NET 6 Program

The .NET 6 Program file contains top-level statements which are converted by the new C# 10 compiler into a Main() method and Program class for the .NET program. The Main() method is the entry point for a .NET application, when an app is started it searches for the Main() method to begin execution. The top-level statements can be located anywhere in the project but are typically placed in the Program.cs file, only one file can contain top-level statements within a .NET application.

The Program class configures .NET Dependency Injection (DI) the HTTP request pipeline for the application. The global error handler middleware is configured on line 51 by calling app.UseMiddleware<ErrorHandlerMiddleware>();

using Microsoft.EntityFrameworkCore;
using WebApi.Authorization;
using WebApi.Helpers;
using WebApi.Services;

var builder = WebApplication.CreateBuilder(args);

// add services to DI container
{
    var services = builder.Services;
    var env = builder.Environment;
 
    // use sql server db in production and sqlite db in development
    if (env.IsProduction())
        services.AddDbContext<DataContext>();
    else
        services.AddDbContext<DataContext, SqliteDataContext>();
 
    services.AddCors();
    services.AddControllers();

    // configure automapper with all automapper profiles from this assembly
    services.AddAutoMapper(typeof(Program));

    // configure strongly typed settings object
    services.Configure<AppSettings>(builder.Configuration.GetSection("AppSettings"));

    // configure DI for application services
    services.AddScoped<IJwtUtils, JwtUtils>();
    services.AddScoped<IUserService, UserService>();
}

var app = builder.Build();

// migrate any database changes on startup (includes initial db creation)
using (var scope = app.Services.CreateScope())
{
    var dataContext = scope.ServiceProvider.GetRequiredService<DataContext>();    
    dataContext.Database.Migrate();
}

// configure HTTP request pipeline
{
    // global cors policy
    app.UseCors(x => x
        .AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader());

    // global error handler
    app.UseMiddleware<ErrorHandlerMiddleware>();

    // custom jwt auth middleware
    app.UseMiddleware<JwtMiddleware>();

    app.MapControllers();
}

app.Run("http://localhost:4000");

.NET Example Error Throwing Service

This is an example service to show how to throw custom app exceptions and not found exceptions that will be handled by the global error handler middleware, resulting in 400 and 404 HTTP responses respectively.

namespace WebApi.Services;
    
using WebApi.Helpers;

public class ExampleErrorService
{
    public void ExampleErrors() {
        // a custom app exception that will return a 400 response
        throw new AppException("Email or password is incorrect");

        // a key not found exception that will return a 404 response
        throw new KeyNotFoundException("Account not found");
    }
}

Subscribe to my YouTube channel or follow me on Twitter, Facebook or GitHub to be notified when I post new content.

I’m currently attempting to travel around Australia by motorcycle with my wife Tina on a pair of Royal Enfield Himalayans. You can follow our adventures on YouTube, Instagram and Facebook.

  • Download source code — 12.5 KB

Introduction

This article describes the standard techniques of handling exceptions and errors in Visual C++ programs running in Windows.

An exception (or a critical error, or crash) typically means your program stops working normally and needs to stop its execution.
For example, an exception may occur because of your program accessing an invalid memory address (such as NULL pointer), memory buffer
can’t be allocated (out of memory), the C run-time libraries (CRT) detect an error and request program termination, and so on.

A C++ program may handle several types of exceptions: SEH exceptions produced through the Operating System’s structured exception handling mechanism,
CRT errors produced by the C run-time libraries, and finally, signals. Each error type requires installing an exception handler function that would
intercept an exception and do some error recovery actions.

If your application has several execution threads, things may be even more complicated. Some exception handlers work for an entire process, but some work
for the current thread only. So you have to install exception handlers in each thread.

Each module (EXE or DLL) in your application is linked to CRT libraries (either statically or dynamically). Exception handling techniques strongly depend on the CRT linkage type.

The variety of error types, differences of handling exceptions in multi-threaded programs, and dependence of exception handling on CRT linkage requires
a lot of work to handle exactly all exceptions that your application is allowed to handle. This article is aimed to help you better understand
the exception handling mechanisms and effectively use exception handling in your C++ applications.

A small console demo application ExceptionHandler is attached to the article. The demo can raise and catch different types of exceptions
and generate a crash minidump file allowing to see the line of the code where exception occurred.

Background

Some time ago I needed a way for intercepting exceptions for one of my Open-Source projects, CrashRpt — A crash reporting
library for Windows applications. The CrashRpt library handles exceptions occurring in your application, collects technical information about
the error (such as crash minidump, error logs, desktop screenshots), and offers the user to send an error report over the Internet (figure 1).

Figure 1 — Error report window and error report details dialogs of the CrashRpt library

crashrpt.png

Maybe you have seen the Windows Error Reporting window (figure 2) suddenly appearing on your desktop, and the CrashRpt library does the same things,
except it sends the error report to your own web-server instead of Microsoft’s server.

Figure 2 — Windows Error Reporting (Dr. Watson) window

wer.gif

Browsing the MSDN gave me the SetUnhandledExceptionFilter() function that I used to handle access violations. But soon I figured out that some
of exceptions in my application are somehow left unhandled and Dr. Watson’s window still appears instead of the CrashRpt window.

I browsed MSDN some more and found many other CRT-provided functions that could be used to handle CRT errors. Here are some examples of such
functions: set_terminate(), _set_invalid_parameter_handler(), _set_purecall_handler().

Then I found that some CRT handlers are valid for the current thread only, but some of them work for all threads of the process.

Continuing my research, I found out that there are many nuances a developer must understand to use exception handling effectively. Results of my research are presented below.

Some Words About Exceptions

As you already know, an exception or a critical error typically means that a program stops working normally and needs to stop its execution.

For example, an exception may occur because of the following:

  • program accesses an invalid memory address (such as NULL pointer)
  • stack overflows due to infinite recursion
  • large block of data is written to a small buffer
  • a pure virtual method of a C++ class is called
  • memory buffer can’t be allocated (out of memory)
  • invalid parameter is passed to a C++ system function
  • C run-time libraries detect an error and request program termination

There are two kinds of exceptions that have a different nature: SEH exceptions (Structured Exception Handling, SEH) and typed C++ exceptions.
You can find an in-depth description of exception mechanism implementation in the excellent How a Compiler
Implements Exception Handling article by Vishal Kochhar.

Structured exception handling mechanism is provided by the Operating System (this means that all Windows applications can raise and handle SEH exceptions).
SEH exceptions were originally designed for the C language, but they can be used in C++ too.

SEH exceptions are handled using the __try{}__except(){} construction. The main() function of your program is guarded with such
a construction, so by default all unhandled SEH exceptions are caught and Dr. Watson is invoked. SEH exceptions are Visual C++ compiler-specific.
If you write portable code, you should guard the structured exception handling construction with #ifdef/#endif.

Here is a code example:

int* p = NULL;   __try
{
        *p = 13; }
__except(EXCEPTION_EXECUTE_HANDLER) {  
     
        ExitProcess(1);
}

On the other hand, the C++ typed exception mechanism is provided by the C run-time libraries (this means that only C++ applications can raise and handle
such exceptions). C++ typed exceptions are handled using the try{}catch{} construction. An example is presented below (the code taken
from http://www.cplusplus.com/doc/tutorial/exceptions/):

#include <iostream>
using namespace std;
int main () {
    try
    {
        throw 20;
    }
    catch (int e)
    {
        cout << "An exception occurred. Exception Nr. " << e << endl;
    }
    return 0;
}

Structured Exception Handling

When a SEH exception occurs, you typically see a window of Dr. Watson (see figure 2) that offers to send an error report to Microsoft. You even can generate
an SEH exception yourself using the RaiseException() function.

Each SEH exception has an associated exception code. You can extract the exception code inside of the __except statement using
the GetExceptionCode() intrinsic function. You can extract the exception information inside of the __except statement using
the GetExceptionInformation() intrinsic function. To use these intrinsic functions, you usually create your custom exception filter as shown in the example below.

The following example shows how to use an SEH exception filter:

int seh_filter(unsigned int code, struct _EXCEPTION_POINTERS* ep)
{
      return EXCEPTION_EXECUTE_HANDLER;
}
void main()
{
  __try
  {
      }
  __except(seh_filter(GetExceptionCode(), GetExceptionInformation()))
  {    
        ExitProcess(1);
  }
}

The __try{}__except(){} construction is mostly C oriented. However, you can redirect an SEH exception to a C++ typed exception and handle
it as you do with C++ typed exceptions. This can be done using the _set_se_translator() function provided by the C++ runtime libraries (CRT).

Here is a code example (taken from MSDN):

#include <stdio.h>
#include <windows.h>
#include <eh.h>
void SEFunc();
void trans_func( unsigned int, EXCEPTION_POINTERS* );
class SE_Exception
{
private:
    unsigned int nSE;
public:
    SE_Exception() {}
    SE_Exception( unsigned int n ) : nSE( n ) {}
    ~SE_Exception() {}
    unsigned int getSeNumber() { return nSE; }
};
int main( void )
{
    try
    {
        _set_se_translator( trans_func );
        SEFunc();
    }
    catch( SE_Exception e )
    {
        printf( "Caught a __try exception with SE_Exception.n" );
    }
}
void SEFunc()
{
    __try
    {
        int x, y=0;
        x = 5 / y;
    }
    __finally
    {
        printf( "In finallyn" );
    }
}
void trans_func( unsigned int u, EXCEPTION_POINTERS* pExp )
{
    printf( "In trans_func.n" );
    throw SE_Exception();
}

However, the disadvantage of the __try{}__catch(Expression){} construction is that you may forget to guard a potentially incorrect code that may cause
an exception that won’t be handled by your program. Such an unhandled SEH exception can be caught using the top-level unhandled exception filter set with
the SetUnhandledExceptionFilter() function.

Note: The word top-level means that if someone calls the SetUnhandledExceptionFilter() function after your call,
the exception filter will be replaced. This is a disadvantage because you can’t chain top-level handlers one above another. Such a disadvantage can be eliminated
by a Vectored Exception Handling mechanism discussed later.

The exception information (CPU state before the exception occurred) is passed to the exception handler through the EXCEPTION_POINTERS structure.

Here is a code example:

LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionPtrs)
{
        return EXCEPTION_EXECUTE_HANDLER; 
} 
void main()
{ 
  SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
  }

The top-level SEH exception handler works for all threads of the caller process, so it’s enough to call it once in the beginning of your main() function.

The top-level SEH exception handler is called in the context of the thread where the exception has occurred. This can affect the exception handler’s ability to recover
from certain exceptions, such as an invalid stack.

If your exception handler function is located inside of a DLL, you should be careful when using the SetUnhandledExceptionFilter() function.
If your DLL is unloaded at the moment of crash, the behavior may be unpredictable.

Note: In Windows 7, there is a new function RaiseFailFastException(). This function allows to ignore all installed exception
handlers (either SEH or vectored) and pass the exception directly to Dr. Watson. Typically, you call this function if your application is in a bad state and you
want to terminate the application immediately and have a Windows Error Report created. For additional information, see the Reference section below.

Vectored Exception Handling

Vectored Exception Handling (VEH) is an extension to structured exception handling. It was introduced in Windows XP.

To add a vectored exception handler, you can use the AddVectoredExceptionHandler() function. The disadvantage is that VEH is only available in Windows XP
and later, so the presence of AddVectoredExceptionHandler() function should be checked at run-time.

To remove the previously installed handler, use the RemoveVectoredExceptionHandler() function.

VEH allows to watch or handle all SEH exceptions for the application. To preserve backward compatibility, when an SEH exception occurs in some part of the program,
the system calls the installed VEH handlers in turn, after that it searches for the usual SEH handlers.

An advantage of VEH is the ability to chain exception handlers, so if somebody installs a vectored exception handler above yours, you still can intercept the exception.

Vectored exception handling is suitable when you need to monitor _all_ SEH exceptions, like a debugger does. But the problem is you have to decide which
exception to handle and which to skip. In the program’s code, some exceptions may be intentionally guarded by a __try{}__except(){} construction, and by handling
such exceptions in VEH and not passing it to a frame-based SEH handler, you may introduce bugs into the application logics.

I think that the SetUnhandledExceptionFilter() function is more suitable for exception handling than VEH, because it is the top-level SEH handler.
If nobody handles the exception, the top-level SEH handler is called and you don’t need to decide if you should skip the exception or not.

CRT Error Handling

In addition to SEH exceptions and C++ typed exceptions, C runtime libraries (CRT) provides their own error handling mechanism that should be taken into account
in your program. When a CRT error occurs, you typically see a CRT error message window (figure 3).

Figure 3 — CRT Error Message

invparam_error.png

Terminate Handler

When CRT encounters an unhandled C++ typed exception, it calls the terminate() function. To intercept such calls and take an appropriate action,
you should set the error handler using the set_terminate() function.

Here is a code example:

void my_terminate_handler()
{
        exit(1); 
}
void main()
{
  set_terminate(my_terminate_handler);
  terminate();
}

There is the unexpected() function that is not used with the current implementation of Visual C++ exception handling. However, consider using
the set_unexpected() function to set a handler for the unexpected() function, too.

Note: In a multi-threaded environment, unexpected and terminate functions are maintained separately for each thread. Each new thread needs to install
its own unexpected and terminate function. Thus, each thread is in charge of its own unexpected and terminate handling.

Pure Call Handler

Use the _set_purecall_handler() function to handle pure virtual function calls. This function can be used in VC++ .NET 2003 and later.
This function works for all threads of the caller process.

Here is a code example (taken from MSDN):

#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
class CDerived;
class CBase
{
public:
   CBase(CDerived *derived): m_pDerived(derived) {};
   ~CBase();
   virtual void function(void) = 0;
   CDerived * m_pDerived;
};
class CDerived : public CBase
{
public:
   CDerived() : CBase(this) {};      virtual void function(void) {};
};
CBase::~CBase()
{
   m_pDerived -> function();
}
void myPurecallHandler(void)
{
   printf("In _purecall_handler.");
   exit(0);
}
int _tmain(int argc, _TCHAR* argv[])
{
   _set_purecall_handler(myPurecallHandler);
   CDerived myDerived;
}

New Operator Fault Handler

Use the _set_new_handler() function to handle memory allocation faults. This function can be used in VC++ .NET 2003 and later.
This function works for all threads of the caller process. Consider using the _set_new_mode() function to define error behaviour for the malloc() function.

Here is a code example (taken from MSDN):

#include <new.h>
int handle_program_memory_depletion( size_t )
{
   }
int main( void )
{
   _set_new_handler( handle_program_memory_depletion );
   int *pi = new int[BIG_NUMBER];
}

Invalid Parameter Handler

Use the _set_invalid_parameter_handler() function to handle situations when CRT detects an invalid argument in a system function call.
This function can be used in VC++ 2005 and later. This function works for all threads of the caller process.

Here is a code example (taken from MSDN):

#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>  // For _CrtSetReportMode
void myInvalidParameterHandler(const wchar_t* expression,
   const wchar_t* function, 
   const wchar_t* file, 
   unsigned int line, 
   uintptr_t pReserved)
{
   wprintf(L"Invalid parameter detected in function %s."
            L" File: %s Line: %dn", function, file, line);
   wprintf(L"Expression: %sn", expression);
}
int main( )
{
   char* formatString;
   _invalid_parameter_handler oldHandler, newHandler;
   newHandler = myInvalidParameterHandler;
   oldHandler = _set_invalid_parameter_handler(newHandler);
      _CrtSetReportMode(_CRT_ASSERT, 0);
      formatString = NULL;
   printf(formatString);
}

C++ Signal Handling

C++ provides a program interruption mechanism called signals. You can handle the signals with the signal() function.

In Visual C++, there are six types of signals:

  • SIGABRT Abnormal termination
  • SIGFPE Floating-point error
  • SIGILL Illegal instruction
  • SIGINT CTRL+C signal
  • SIGSEGV Illegal storage access
  • SIGTERM Termination request

MSDN says that the SIGILL, SIGSEGV, and SIGTERM signals are not generated under Windows and included for ANSI compatibility.
However, practice shows that if you set the SIGSEGV signal handler in the main thread, it is called by CRT instead of the SEH exception handler set with
the SetUnhandledExceptionFilter() function and the global variable _pxcptinfoptrs contains a pointer to the exception information. In other threads,
the exception filter set with SetUnhandledExceptionFilter() function is called instead of the SIGSEGV handler.

Note: In Linux, signals are the main way of exception handling (Linux’s implementation of C run-time, glibc, also provides set_unexpected()
and set_terminate() handlers). As you can see, in Windows, signals are not used as intensively as they deserve. Instead of using signals, C run-time libraries
provide several Visual C++-specific error handler functions, such as _invalid_parameter_handler() and so on.

The _pxcptinfoptrs global variable can also be used in the SIGFPE handler. In all other signal handlers, it seems to be NULL.

The SIGFPE signal handler is called by CRT when a floating point error occurs, such as division by zero. However, by default, floating point exceptions
are not generated, instead NaN or infinity numbers are generated as the result of a floating point operation. Use the _controlfp_s() function to enable
floating point exception generation.

You can generate all six signals manually using the raise() function.

Here is an example:

void sigabrt_handler(int)
{
      exit(1);
}
void main()
{
  signal(SIGABRT, sigabrt_handler);
     
    abort();       
}

Note: Although it is not well documented in MSDN, it seems that you should install SIGFPE, SIGILL, and SIGSEGV
signal handlers for each new thread in your program. The SIGABRT, SIGINT, and SIGTERM signal handlers seems to work for all threads
of the caller process, so you should install them once in your main() function.

Retrieving Exception Information

When an exception occurs, you typically want to get the CPU state to determine the place in your code that caused the problem. You may want to pass this information
to the MiniDumpWriteDump() function to debug the problem later (for an example of how to do this,
see the XCrashReport: Exception Handling and Crash Reporting — Part 3
article by Hans Dietrich). The way you retrieve the exception information differs depending on the exception handler you use.

In the SEH exception handler set with the SetUnhandledExceptionFilter() function, the exception information is retrieved from the EXCEPTION_POINTERS
structure passed as the function parameter.

In the __try{}__catch(Expression){} construction, you retrieve the exception information using the GetExceptionInformation() intrinsic function
and pass it to the SEH exception filter function as a parameter.

In the SIGFPE and SIGSEGV signal handlers, you can retrieve the exception information from the _pxcptinfoptrs global CRT variable
that is declared in <signal.h>. This variable is not documented well in MSDN.

In other signal handlers and in CRT error handlers, you have no ability to easily extract the exception information. I found a workaround used in the CRT code (see CRT 8.0
source files, invarg.c, line 104).

The following code shows how to get the current CPU state used as exception information:

#if _MSC_VER>=1300
#include <rtcapi.h>
#endif
#ifndef _AddressOfReturnAddress
#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif
EXTERNC void * _AddressOfReturnAddress(void);
EXTERNC void * _ReturnAddress(void);
#endif 
void GetExceptionPointers(DWORD dwExceptionCode, 
  EXCEPTION_POINTERS** ppExceptionPointers)
{
    
  EXCEPTION_RECORD ExceptionRecord;
  CONTEXT ContextRecord;
  memset(&ContextRecord, 0, sizeof(CONTEXT));
  
#ifdef _X86_
  __asm {
      mov dword ptr [ContextRecord.Eax], eax
      mov dword ptr [ContextRecord.Ecx], ecx
      mov dword ptr [ContextRecord.Edx], edx
      mov dword ptr [ContextRecord.Ebx], ebx
      mov dword ptr [ContextRecord.Esi], esi
      mov dword ptr [ContextRecord.Edi], edi
      mov word ptr [ContextRecord.SegSs], ss
      mov word ptr [ContextRecord.SegCs], cs
      mov word ptr [ContextRecord.SegDs], ds
      mov word ptr [ContextRecord.SegEs], es
      mov word ptr [ContextRecord.SegFs], fs
      mov word ptr [ContextRecord.SegGs], gs
      pushfd
      pop [ContextRecord.EFlags]
  }
  ContextRecord.ContextFlags = CONTEXT_CONTROL;
#pragma warning(push)
#pragma warning(disable:4311)
  ContextRecord.Eip = (ULONG)_ReturnAddress();
  ContextRecord.Esp = (ULONG)_AddressOfReturnAddress();
#pragma warning(pop)
  ContextRecord.Ebp = *((ULONG *)_AddressOfReturnAddress()-1);
#elif defined (_IA64_) || defined (_AMD64_)
  
  RtlCaptureContext(&ContextRecord);
#else  /* defined (_IA64_) || defined (_AMD64_) */
  ZeroMemory(&ContextRecord, sizeof(ContextRecord));
#endif  /* defined (_IA64_) || defined (_AMD64_) */
  ZeroMemory(&ExceptionRecord, sizeof(EXCEPTION_RECORD));
  ExceptionRecord.ExceptionCode = dwExceptionCode;
  ExceptionRecord.ExceptionAddress = _ReturnAddress();
  
  EXCEPTION_RECORD* pExceptionRecord = new EXCEPTION_RECORD;
  memcpy(pExceptionRecord, &ExceptionRecord, sizeof(EXCEPTION_RECORD));
  CONTEXT* pContextRecord = new CONTEXT;
  memcpy(pContextRecord, &ContextRecord, sizeof(CONTEXT));
  *ppExceptionPointers = new EXCEPTION_POINTERS;
  (*ppExceptionPointers)->ExceptionRecord = pExceptionRecord;
  (*ppExceptionPointers)->ContextRecord = pContextRecord;  
}

Exception Handling and CRT Linkage

Each module (EXE, DLL) in your application is linked to CRT (C run-time libraries). You may link CRT as a multi-threaded static library or as a multi-threaded dynamic link library.
When you set CRT error handlers, such as terminate handler, unexpected handler, pure call handler, invalid parameter handler, new operator error handler, or a signal handler,
they will work for the CRT the caller module is linked to and won’t intercept exceptions in different CRT modules (if exist), because each CRT module has its own internal state.

Several project modules may share a single CRT DLL. This reduces to minimum the overall size of the linked CRT code. And all exceptions within that CRT DLL can be handled at once.
That’s why a multi-threaded CRT DLL is the recommended way of CRT linkage. However, many developers still prefer static CRT linkage because it’s easier to distribute a single executable
module statically linked with CRT than to distribute the same executable linked with several dynamic-link CRT libraries (for more information,
see the Create projects easily with private MFC, ATL, and CRT assemblies article by Martin Richter).

If you plan to use CRT as a static link library (which is not recommended) and want to use some exception handling functionality, you have to build the functionality as a static
library with the /NODEFAULTLIB linker flag and then link this functionality to each EXE and DLL module of your application. You would also have to install the CRT
error handlers for each module of your application, while the SEH exception handler would still be installed once.

Visual C++ Compiler Flags

There are several Visual C++ compiler switches that are related to exception handling. You can find the switches if you open project
Properties->Configuration Properties->C/C++->Code Generation.

Exception Handling Model

You can set an exception handling model for your Visual C++ compiler with /EHs (or EHsc) to specify synchronous exception handling model,
or /EHa to specify asynchronous exception handling model. The asynchronous model can be used to force the try{}catch(){} construction to catch
both SEH and C++ typed exceptions (the same effect can be achieved with the _set_se_translator() function). If a synchronous model is utilized, SEH exceptions
are not caught by the try{}catch(){} construction. Asynchronous model was the default in previous versions of Visual C++, but the synchronous one is the default
in the newer versions.

Floating Point Exceptions

You can enable floating point exceptions using the /fp:except compiler flag. This option is disabled by default, so floating point exceptions are not raised.
For more information, see /fp(Specify Floating Point Behavior) in the References section below.

Buffer Security Checks

By default, you have the /GS (Buffer Security Check) compiler flag enabled that forces the compiler to inject code that would check for buffer overruns.
A buffer overrun is a situation when a large block of data is written to a small buffer.

Note; In Visual C++ .NET (CRT 7.1), you can use the _set_security_error_handler() function that CRT calls when a buffer overrun is detected.
However, this function is deprecated in the later versions of CRT.

Since CRT 8.0, you can’t intercept the buffer overrun errors in your code. When a buffer overrun is detected, CRT invokes Dr. Watson directly instead of calling
the unhandled exception filter. This is done because of security reasons and Microsoft doesn’t plan to change this behavior. For additional info, please see these links:

  • https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101337
  • http://blog.kalmbachnet.de/?postid=75

Using the Code

A small console demo application ExceptionHandler is attached to the article. The demo can raise and catch different types of exceptions and generate
a crash minidump file. The app is displayed in the figure below.

Figure 4 — ExceptionHandler Sample Application

exception_handler_demo.png

To see how this works, you need to chose an exception type (enter a number between 0 and 13) and press Enter. Then an exception is raised and caught by an exception handler.
The exception handler then invokes the code that generates a crash minidump file using the MiniDumpWriteDump() function from dbghelp.dll. The minidump file
is written to the current folder and named crashdump.dmp. You can double-click the file to open it in Visual Studio, then press F5 to run it and see the line
of the code where exception occurred.

There are two logical parts in the application: the part that raises exceptions and the part that catches the exceptions and generates crash minidump.
These two parts are described below.

The file main.cpp contains the main() function that contains the code for exception type selection and a big switch to choose what exception
to rise. To raise an exception, the main function may call raise() or RaiseException() functions, throw a C++ typed exception, call some helper
code, like RecurseAlloc() or sigfpe_test() and so on.

In the beginning of the main() function, an instance of CCrashHandler class is created. This instance is used to later catch an exception.
We call CCrashHandler::SetProcessExceptionHandlers() method to set exception handlers working for the entire process (like SEH exception handler).
We call CCrashHandler::SetThreadExceptionHandlers() method to install exception handlers that work for the current thread only (like unexpected or terminate handlers).

Below, the code of the main function is presented.

void main()
{
    CCrashHandler ch;
    ch.SetProcessExceptionHandlers();
    ch.SetThreadExceptionHandlers();
    
    printf("Choose an exception type:n");
    printf("0 - SEH exceptionn");
    printf("1 - terminaten");
    printf("2 - unexpectedn");
    printf("3 - pure virtual method calln");
    printf("4 - invalid parametern");
    printf("5 - new operator faultn");    
    printf("6 - SIGABRTn");
    printf("7 - SIGFPEn");
    printf("8 - SIGILLn");
    printf("9 - SIGINTn");
    printf("10 - SIGSEGVn");
    printf("11 - SIGTERMn");
    printf("12 - RaiseExceptionn");
    printf("13 - throw C++ typed exceptionn");
    printf("Your choice >  ");

    int ExceptionType = 0;
    scanf_s("%d", &ExceptionType);

    switch(ExceptionType)
    {
    case 0:         {
                        int *p = 0;
#pragma warning(disable : 6011)
            *p = 0;
#pragma warning(default : 6011)   
        }
        break;
    case 1:         {
                        terminate();
        }
        break;
    case 2:         {
                        unexpected();
        }
        break;
    case 3:         {
                        CDerived derived;
        }
        break;
    case 4:         {      
            char* formatString;
                        formatString = NULL;
#pragma warning(disable : 6387)
            printf(formatString);
#pragma warning(default : 6387)   

        }
        break;
    case 5:         {
                        RecurseAlloc();
        }
        break;
    case 6:         {
                        abort();
        }
        break;
    case 7:         {
                        sigfpe_test();            
        }    
        break;
    case 8:         {
            raise(SIGILL);              
        }    
        break;
    case 9:         {
            raise(SIGINT);              
        }    
        break;
    case 10:         {
            raise(SIGSEGV);              
        }    
        break;
    case 11:         {
            raise(SIGTERM);            
        }
        break;
    case 12:         {
                        RaiseException(123, EXCEPTION_NONCONTINUABLE, 0, NULL);        
        }
        break;
    case 13:         {
                        throw 13;
        }
        break;
    default:
        {
            printf("Unknown exception type specified.");    
            _getch();
        }
        break;
    }
}

The files CrashHandler.h andCrashHandler.cpp contain the implementation of the exception handling and crash minidump generation functionality.
Below the declaration of the class is presented.

class CCrashHandler  
{
public:

        CCrashHandler();

        virtual ~CCrashHandler();

        void SetProcessExceptionHandlers();

        void SetThreadExceptionHandlers();

        static void GetExceptionPointers(
        DWORD dwExceptionCode, 
        EXCEPTION_POINTERS** pExceptionPointers);

        static void CreateMiniDump(EXCEPTION_POINTERS* pExcPtrs);

    

    static LONG WINAPI SehHandler(PEXCEPTION_POINTERS pExceptionPtrs);
    static void __cdecl TerminateHandler();
    static void __cdecl UnexpectedHandler();

    static void __cdecl PureCallHandler();

    static void __cdecl InvalidParameterHandler(const wchar_t* expression, 
           const wchar_t* function, const wchar_t* file, 
           unsigned int line, uintptr_t pReserved);

    static int __cdecl NewHandler(size_t);

    static void SigabrtHandler(int);
    static void SigfpeHandler(int , int subcode);
    static void SigintHandler(int);
    static void SigillHandler(int);
    static void SigsegvHandler(int);
    static void SigtermHandler(int);
};

As you could see from the code above, the CCrashHandler class has two methods for setting
exception handlers: SetProcessExceptionHandlers() and SetThreadExceptionHandlers(), for the entire process and for the current thread, respectively.
The code of these two methods is presented below.

void CCrashHandler::SetProcessExceptionHandlers()
{
        SetUnhandledExceptionFilter(SehHandler);    

                        _set_purecall_handler(PureCallHandler);    

        _set_new_handler(NewHandler);

        _set_invalid_parameter_handler(InvalidParameterHandler); 

    
    _set_abort_behavior(_CALL_REPORTFAULT, _CALL_REPORTFAULT);

        signal(SIGABRT, SigabrtHandler);  

        signal(SIGINT, SigintHandler);     

        signal(SIGTERM, SigtermHandler);          
}

void CCrashHandler::SetThreadExceptionHandlers()
{

                        set_terminate(TerminateHandler);       

                        set_unexpected(UnexpectedHandler);    

        typedef void (*sigh)(int);
    signal(SIGFPE, (sigh)SigfpeHandler);     

        signal(SIGILL, SigillHandler);     

        signal(SIGSEGV, SigsegvHandler);   

}

In the class declaration, you also can see several exception handler functions, such as SehHandler(), TerminateHandler() and so on.
Any of these exception handlers can be called when an exception occurrs. A handler function (optionally) retrieves exception information and invokes crash minidump
generation code, then it terminates process with TerminateProcess() function call.

The GetExceptionPointers() static method is used to retrieve exception information. I’ve described how this works in the section Retrieving Exception Information above.

The CreateMiniDump() method is used for crash minidump generation. It takes a pointer to the EXCEPTION_POINTERS structure containing exception information.
The method calls the MiniDumpWriteDump() function from Microsoft Debug Help Library to generate a minidump file. The code of the method is presented below.

void CCrashHandler::CreateMiniDump(EXCEPTION_POINTERS* pExcPtrs)
{   
    HMODULE hDbgHelp = NULL;
    HANDLE hFile = NULL;
    MINIDUMP_EXCEPTION_INFORMATION mei;
    MINIDUMP_CALLBACK_INFORMATION mci;
    
        hDbgHelp = LoadLibrary(_T("dbghelp.dll"));
    if(hDbgHelp==NULL)
    {
                return;
    }

        hFile = CreateFile(
        _T("crashdump.dmp"),
        GENERIC_WRITE,
        0,
        NULL,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);

    if(hFile==INVALID_HANDLE_VALUE)
    {
                return;
    }
   
        mei.ThreadId = GetCurrentThreadId();
    mei.ExceptionPointers = pExcPtrs;
    mei.ClientPointers = FALSE;
    mci.CallbackRoutine = NULL;
    mci.CallbackParam = NULL;

    typedef BOOL (WINAPI *LPMINIDUMPWRITEDUMP)(
        HANDLE hProcess, 
        DWORD ProcessId, 
        HANDLE hFile, 
        MINIDUMP_TYPE DumpType, 
        CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, 
        CONST PMINIDUMP_USER_STREAM_INFORMATION UserEncoderParam, 
        CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam);

    LPMINIDUMPWRITEDUMP pfnMiniDumpWriteDump = 
        (LPMINIDUMPWRITEDUMP)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
    if(!pfnMiniDumpWriteDump)
    {    
                return;
    }

    HANDLE hProcess = GetCurrentProcess();
    DWORD dwProcessId = GetCurrentProcessId();

    BOOL bWriteDump = pfnMiniDumpWriteDump(
        hProcess,
        dwProcessId,
        hFile,
        MiniDumpNormal,
        &mei,
        NULL,
        &mci);

    if(!bWriteDump)
    {    
                return;
    }

        CloseHandle(hFile);

        FreeLibrary(hDbgHelp);
}

References

  • Exception Handling in Visual C++
  • SetUnhandledExceptionFilter()
  • RaiseException()
  • GetExceptionInformation()
  • GetExceptionCode()
  • set_terminate()
  • set_unexpected()
  • _set_se_translator()
  • _set_security_error_handler()
  • _set_purecall_handler()
  • _set_new_handler()
  • _set_invalid_parameter_handler()
  • signal()
  • raise()
  • /EH (Exception Handling Model)
  • /fp (Specify Floating-Point Behavior)
  • /GS (Buffer Security Check)
  • C Run-time Libraries (CRT)
  • Under the Hood: New Vectored Exception Handling in Windows XP
  • Vectored Exception Handling
  • AddVectoredExceptionHandler Function
  • RemoveVectoredExceptionHandler Function
  • RaiseFailFastException Function

History

  • 7 June 2011 — Initial release.
  • 10 June 2011 — Added Visual C++ compiler flags and the References section.
  • 6 January 2012 — Added ExceptionHandler sample code and added the Using the Code section.

I am a software developer currently living in Tomsk, Russia. I received a PhD degree in Computer Science from Tomsk Polytechnic University in 2010. I have been professionally developing C/C++ and PHP software since 2005. I like contributing to open-source and writing programming articles for popular web resources, like CodeProject. Besides writing, I love skiing and watching Formula-1.

С синими экранами знаком практически каждый пользователь, который хотя-бы иногда работает за компьютером. В основном они появляются при загрузке устройства, еще реже в момент работы.

Сегодня мы рассмотрим сбой с типичной ошибкой system thread exception not handled, сопровождающуюся кодом 0x0000007E или 0x1000007e. Давайте поговорим о том, что делать и как ее исправить в Windows 10 и более ранних версиях.

Содержание статьи

  1. Причины возникновения
  2. Случайный сбой
  3. Подключенное оборудование
  4. Системные ошибки
  5. Сброс настроек BIOS
  6. Отключаем аппаратное ускорение
  7. Диагностируем оперативную память
  8. Определяем дефектный драйвер
  9. Диагностируем поломку на стороне комплектующих
  10. Другие варианты
  11. Альтернативные способы решения разобраны в этом видео
  12. Комментарии пользователей

Причины возникновения

Существуют множество причин способных вызвать сбой. Определить точно в чем была неисправность получается только опробовав все методы, о которых я расскажу ниже.

Чаще всего проблема находится на стороне:

  • Случайного сбоя ПК;
  • Подключенного оборудования;
  • Системных ошибок;
  • Неверных настроек BIOS;
  • Аппаратного ускорения;
  • Оперативной памяти;
  • Дефектного драйвера какого-либо компонента;
  • Прочих комплектующих (жесткого диска, блока питания, видеокарты, материнской платы).

Теперь, после того как мы разобрались с причинами появления кода остановки system thread exception not handled, можем переходить непосредственно к устранению.

Перед тем как приступать к выполнению конкретных действий, обзаведитесь установочным диском Windows 10, он будет весьма кстати, если ПК не получается загрузить даже в безопасном режиме. В любом другом случае используйте безопасный режим или LiveCD.

Случайный сбой

Возможно мы имеем дело с единичным сбоем. В большинстве случаев исправить ситуацию получается отключением компьютера от сети на пару минут.

Подключенное оборудование

Если к компьютеру подключено дополнительное оборудование (принтер, сканер, веб камера), то убедитесь, что их драйвера совместимы с установленной операционной системой. Как вариант, можно попробовать временно отключить сторонние устройства и проверить результат.

компьютерная техника

Нередко код ошибки system thread exception not handled вызывают компьютерные мыши, веб камеры от Microsoft или Logitech. Видимо это связано с несовместимостью их ПО с Windows 10. Если вы обладатель подобного девайса, то попробуйте использовать другую мышь или обновить ПО.

Системные ошибки

Очень часто получается наладить работу системы, путем исправления ошибок на стороне важных файлов. Делается это двумя методами:

  1. Первый – через меню «Мой компьютер». Я рассказывал о нем в статье про устранение неполадок на жестком диске.
  2. С использованием командной строки, выполнив команду sfc /scannow.проверка файлов

Оба способа работают только из-под Windows, поэтому в случаях, когда код остановки system thread exception not handled возникает на этапе запуска, нужно использовать установочный образ, записанный на флешку или диск. И запускать консоль с него. Как это сделать, читайте ниже в разделе про определение дефектного ПО.

Сброс настроек BIOS

Возможно причиной появления синего экрана стали неверные настройки BIOS. Даже если вы их не меняли, они могли измениться автоматически после какого-либо сбоя. Например, после скачка напряжения в сети или из-за израсходованной батарейки питания биоса. В таком случае ее нужно менять.

Как это сделать:

  1. Входим в Биос.
  2. Находим параметр, отвечающий за сброс настроек. Чаще всего он имеет название «Optimized Defaults».оптимальные настройки
  3. Нажимаем по параметру и подтверждаем действие.
  4. Сохраните настройки и перезапустите ПК.

После этого все должно работать.

Отключаем аппаратное ускорение

Если ошибка system thread exception not handled возникает во время работы Windows 10, то скорее всего источником проблемы является включенное аппаратное ускорение.

Как его отключить на примере браузера Google Chrome:

  1. Щелкаем по пункту меню и открываем панель настроек.панель настроек
  2. Пролистываем страницу в самый низ и нажимаем по пункту «Дополнительные».дополнительные настройки
  3. Находим и отключаем опцию аппаратного ускорения.
  4. Перезапускаем браузер.

Если у вас другой браузер, то ищите в настройках аналогичную опцию. Например, в опере параметр ускорения находится в разделе «Браузер — Система».

Диагностируем оперативную память

Также не стоит исключать проблемы на стороне оперативной памяти. Даже в случае установки новый планок памяти, это не исключает возможных ошибок и моментов несовместимости.

Рекомендует выполнять проверку следующим образом:

  1. Для начала следует вынуть модули и протереть контакты обычным школьным ластиком. Затем аккуратно вставить модули обратно в свои разъемы. Проблема может решиться уже на этом пункте.чистка оперативной памяти
  2. Проверяем момент совместимости планок друг с другом или материнской платой. Для этого проверьте работу компьютера поочередно с каждым модулем.
  3. Выполните тестирование памяти на предмет ошибок с помощью утилиты «memtest86+».

При обнаружении момента несовместимости или ошибок, замените неисправные планки памяти. После этого сбой system thread exception not handled перестанет появляться вовсе.

Определяем дефектный драйвер

Определить неисправный драйвер можно двумя способами, начнем с самого простого, когда удается загрузить Windows 10 в обычном или безопасном режиме.

  1. Открываем диспетчер устройств.
  2. Теперь нужно убедиться, что напротив каждого компонента нет жёлтых или красных знаков, обозначающих проблему в работе устройства.сбой драйверов
  3. Если знаки присутствуют, то производим обновление драйвера конкретного компонента.

Перезагружаем компьютер.

Наиболее точно определить поломку получается программе «BlueScreenView».

Второй способ рекомендую использовать в тех случаях, когда операционную систему загрузить не удается, тогда на помощь приходит установочный диск:

  1. Запишите образ на флешку или диск, зайдите в BIOS и измените порядок загрузки устройств, выставив накопитель с образом на первое место.
  2. Выполните загрузку образа с носителя.
  3. Откройте раздел восстановления.восстановление
  4. Зайдите в раздел «Исправление неисправностей».поиск неисправностей
  5. Затем открываем «Диагностика» и щелкаем по пункту «Дополнительные параметры».дополнительные параметры
  6. Выберите инструмент «Командная строка».запуск командной строки
  7. Пропишите команду bcdedit /set {default}bootmenupolicy legacy и нажмите «Enter».функция сброса
  8. Закройте консоль и перезагрузите компьютер.
  9. Войдите в безопасный режим, быстро нажимая клавишу «F8» в момент загрузки ПК.безопасный режим
  10. Открываем диспетчер устройств, щелкаем правой мышкой по оборудованию, с которым возникла неполадка и выбираем в «Удалить».удаление драйвера
  11. Перезагружаем устройство.

Скорее всего это поможет исправить ошибку system thread exception not handled. Кстати, данный способ универсален и подходит для Windows 8.

Краткий список наиболее частых причин появления сбоя:

  • atikmdag.sys – файл драйвера видеокарты ATI/AMD Radeon. Лечится переустановкой ПО.
  • nvlddmkm.sys – системный файл отвечающий за работу видеокарты NVIDIA. Проблема устраняется переустановкой ПО. Но перед этим необходимо удалить старую версию драйвера.
  • etd.sys – связан с ноутбуком, а точнее с тачпадом. В качестве решения предлагаю удалить драйвера тачпада или обновить их до последней версии.
  • ntfs.sys, ntfs system – специальный компонент отвечающий за данные на NTFS дисках. Исправляется путем сканирования файлов на предмет ошибок командой функцией sfc /scannow, переподключением или заменой неисправного жесткого диска.

Иногда виновниками появления system thread exception not handled становятся совсем другие файлы, но несмотря на это, процедура устранения сбоя практически идентична во всех ситуациях.

Диагностируем поломку на стороне комплектующих

Обычно об аппаратной проблеме говорит не эффективность других вариантов. Тем более если вы перепробовали все вплоть до установки другой версии или сборки Windows.

синий экран

  • Жесткий диск. На стороне жесткого диска может быть что угодно, начиная с перегрева, ошибок файловой системы до появления странных звуков, бэд секторов и выхода из строя. Проверьте каждый момент отдельно.
  • Видеокарта. Еще один компонент, который следует проверить. В связи с высокими температурами видеокарты часто выходят из строя, появляются артефакты, происходит отвал чипа или падают драйвера. Например, у меня была ситуация, когда код system thread exception not handled возникал из-за неисправной видеокарты, после отключения которой все приходило в норму.
  • Блок питания. При нехватке мощности блока питания могут сбоить все устройства, подключенные к ПК. Довольно часто причиной нехватки мощности становятся вздувшиеся конденсаторы.
  • Материнская плата. С материнской платой дела обстоят куда проще, существуют три вида неисправностей, которые можно определить на глаз. Это затемнения участков на плате, вздутие конденсаторов и физические повреждения. Во всех других случаях, определить проблему поможет только диагностика с помощью специального оборудования.

Другие варианты

Если вышеизложенные варианты не принесли результата, то в крайнем случае стоит прибегнуть к откату системы, старту с последней удавшейся конфигурации или переустановке Windows.

Альтернативные способы решения разобраны в этом видео


PreviousUpNext
Up: Error Handling
Next: Error Handlers for Files
Previous: Error Handlers for Communicators

MPI_WIN_CREATE_ERRHANDLER(win_errhandler_fn, errhandler)
IN win_errhandler_fn user defined error handling procedure (function)
OUT errhandler MPI error handler (handle)

int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn, MPI_Errhandler *errhandler)

MPI_Win_create_errhandler(win_errhandler_fn, errhandler, ierror)
PROCEDURE(MPI_Win_errhandler_function) :: win_errhandler_fn
TYPE(MPI_Errhandler), INTENT(OUT) :: errhandler
INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPI_WIN_CREATE_ERRHANDLER(WIN_ERRHANDLER_FN, ERRHANDLER, IERROR)
EXTERNAL WIN_ERRHANDLER_FN
INTEGER ERRHANDLER, IERROR

Creates an error handler that can be attached to a window object.
The user routine should be, in C, a
function of type
MPI_Win_errhandler_function
which is defined as

typedef void MPI_Win_errhandler_function(MPI_Win *, int *, …);

The first argument is the window in use, the second
is the error code to be returned.

With the Fortran mpi_f08 module, the user routine win_errhandler_fn should be of the form:

SUBROUTINE MPI_Win_errhandler_function(win, error_code)
TYPE(MPI_Win) :: win
INTEGER :: error_code

With the Fortran mpi module and mpif.h,
the user routine WIN_ERRHANDLER_FN should be of the form:

SUBROUTINE WIN_ERRHANDLER_FUNCTION(WIN, ERROR_CODE)
INTEGER WIN, ERROR_CODE

MPI_WIN_SET_ERRHANDLER(win, errhandler)
INOUT win window (handle)
IN errhandler new error handler for window (handle)

int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)

MPI_Win_set_errhandler(win, errhandler, ierror)
TYPE(MPI_Win), INTENT(IN) :: win
TYPE(MPI_Errhandler), INTENT(IN) :: errhandler
INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPI_WIN_SET_ERRHANDLER(WIN, ERRHANDLER, IERROR)
INTEGER WIN, ERRHANDLER, IERROR

Attaches a new error handler to a window. The error handler must be
either a predefined error
handler, or an error handler created by a call to
MPI_WIN_CREATE_ERRHANDLER.

MPI_WIN_GET_ERRHANDLER(win, errhandler)
IN win window (handle)
OUT errhandler error handler currently associated with window
(handle)

int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)

MPI_Win_get_errhandler(win, errhandler, ierror)
TYPE(MPI_Win), INTENT(IN) :: win
TYPE(MPI_Errhandler), INTENT(OUT) :: errhandler
INTEGER, OPTIONAL, INTENT(OUT) :: ierror

MPI_WIN_GET_ERRHANDLER(WIN, ERRHANDLER, IERROR)
INTEGER WIN, ERRHANDLER, IERROR

Retrieves the error handler currently associated with a window.


PreviousUpNext
Up: Error Handling
Next: Error Handlers for Files
Previous: Error Handlers for Communicators


Return to MPI-3.1 Standard Index
Return to MPI Forum Home Page


(Unofficial) MPI-3.1 of June 4, 2015
HTML Generated on June 4, 2015

Понравилась статья? Поделить с друзьями:
  • Windows h no such file or directory как исправить
  • Windows get socket error
  • Windows get error message
  • Windows ftp error 530
  • Windows found drivers for your device but encountered an error while attempting to install them