我需要指导如何关闭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”进程正在关闭。
答案 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);
}
}
}
}