0

こんにちは、メイン プロセスを強制終了せずに appdomain コンソール アプリケーションを閉じる方法を教えてください。

このように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」プロセスが閉じていることです。

4

1 に答える 1

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);
            }
        }
    }
}
于 2013-06-11T05:56:11.697 に答える