appdomain关闭控制台没有杀死主进程

时间:2013-06-11 05:19:10

标签: c# appdomain

我需要指导如何关闭appdomain控制台应用程序而不使用kill主进程?

我像这样创建appdomain。

AppDomain testApp = AppDomain.CreateDomain("testApp");
try
{
    string[] args = new string[] { };
    string path = ConfigurationManager.AppSettings.Get("testApp");

    testApp.ExecuteAssembly(path, new System.Security.Policy.Evidence(), args);
}
catch (Exception ex)
{
    //Catch process here
}
finally
{
    AppDomain.Unload(testApp);
}

“testApp”是控制台应用程序,当我关闭该控制台时,调用AppDomain关闭的主应用程序。

*编辑 我在主应用程序上执行上面的代码,让我们说“MyApplication”。当上面的代码执行时,它会运行“testApp”和控制台窗口。我的问题是当我关闭“testApp”控制台窗口时,“MyApplication”进程正在关闭。

1 个答案:

答案 0 :(得分:1)

可能是您的AppDomain正在调用的程序集过早地结束(Environment.Exit(1)等)。

您可以做的是订阅AppDomain的活动 - ProcessExit

namespace _17036954
{
    class Program
    {
        static void Main(string[] args)
        {
            AppDomain testApp = AppDomain.CreateDomain("testApp");
            try
            {
                args = new string[] { };
                string path = ConfigurationManager.AppSettings.Get("testApp");

                //subscribe to ProcessExit before executing the assembly
                testApp.ProcessExit += (sender, e) =>
                {
                    //do nothing or do anything
                    Console.WriteLine("The appdomain ended");
                    Console.WriteLine("Press any key to end this program");
                    Console.ReadKey();
                };

                testApp.ExecuteAssembly(path);
            }
            catch (Exception ex)
            {
                //Catch process here
            }
            finally
            {
                AppDomain.Unload(testApp);
            }
        }
    }
}