Click here to Skip to main content
Click here to Skip to main content
Go to top

Run .exe inside ASP.NET and catch exception using AppDomain

, 18 Feb 2013
Rate this:
Please Sign up or sign in to vote.
.NET exe file run inside asp.net and catch exception from .exe.

Introduction

I will try to explain how any .NET executable file can be run inside the ASP.NET environment and exceptions from the executable file caught as well.

Background 

If you search on line with title like "Execute any executable from asp.net" you can find various solution with code example. But when you want to handle any exception thrown from the executable file, you cannot catch that exception.

Common Solution may found  

You can find many code example. one code example like as follows:

try
{
    // Create An instance of the Process class responsible for starting the newly process.
    System.Diagnostics.Process process1 = new System.Diagnostics.Process();
    // Set the filename name of the file you want to execute/open
    process1.StartInfo.FileName = @"c:\temp\File1.exe";
    process1.StartInfo.Arguments = "args";

    // Start the process without blocking the current thread
    process1.Start();
    // you may wait until finish that executable
    process1.WaitForExit();
    //or you can wait for a certain time interval 
    Thread.Sleep(20000);//Assume within 20 seconds it will finish processing. 
    process1.Close();
}
catch (Exception ex)
{
    Logger.log(ex.Message);
} 

Issue with above code 

Code is working fine. Where the issue is? Well, you can change you .exe file code and throw exception from that executable. Then you see that you cannot catch that exception from current solution.

Why not catch exception? 

When you run any .exe file with the Process object it then create a new independent process and run .exe under that process. For that reason you cannot catch exception. Then what will be solution? 

What will be the solution? 

.NET AppDomain comes with a solution. First you need to create a AppDomain, then .exe file should run inside that AppDomain. AppDomain will not create any independent process, instead it create a isolated environment, this environment will create under current assembly process and any time you can destroy it without any problem.

Is it possible to provide example with code? 

The solution code are as follows

try
{
    //Create a new appdoamin for execute my exe in a isolated way.
    AppDomain sandBox = AppDomain.CreateDomain("sandBox");
    try
    {
        //Exe executing with arguments
        sandBox.ExecuteAssembly(".exe file name with path");
    }
    finally
    {
        AppDomain.Unload(sandBox);//destry created appdomain and memory is released.
    }
}
catch (Exception ex)//Any exception that generate from executable can handle
{
    //Logger.log(ex.Message);
} 

Points of Interest 

I found a limitation on that solution. The limitation is Executable (.exe) must be .NET assembly. No native .exe will work there.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

S. M. Ahasan Habib
Software Developer (Senior) The Jaxara IT Ltd.
Bangladesh Bangladesh
Mostly I work with MS technologies (ASP.NET MVC, WPF, C#, SQL Server, SSRS, SharePoint, Entity Framework, MSTest, Enterprise Library, MEF, WCF, WebAPI, MS Excel, IIS).
Non MS technologies which I love and use (Resharper, NHiberNet, JQuery, AngularJS, KnockoutJS, NodeJS, Python, MSpec, RihnoMock, Crystal Report, Subversion, Crome)

Comments and Discussions

 
Question.NET Executable PinmemberSarafian18-Feb-13 21:03 
AnswerRe: .NET Executable PinmemberS. M. Ahasan Habib18-Feb-13 22:14 
GeneralRe: .NET Executable PinmemberSarafian19-Feb-13 21:17 
GeneralRe: .NET Executable PinmemberS. M. Ahasan Habib19-Feb-13 22:28 
SuggestionState the usage of AppDomain in the title PinmemberEdo Tzumer3-Feb-13 20:41 
GeneralRe: State the usage of AppDomain in the title PinmemberS. M. Ahasan Habib18-Feb-13 4:22 
GeneralMy vote of 5 PinmemberEdo Tzumer3-Feb-13 20:36 
GeneralRe: My vote of 5 PinmemberS. M. Ahasan Habib4-Feb-13 17:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140916.1 | Last Updated 18 Feb 2013
Article Copyright 2013 by S. M. Ahasan Habib
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid