是否可以在多个应用程序域中并行运行相同的应用程序?

时间:2010-10-28 20:41:50

标签: c# appdomain

假设我有一个名为“MyService”的Windows服务和一个名为“MyEXE”的可执行文件

是否可以(在“MyService”中)启动并行运行在单独应用程序域中的“MyEXE”的多个实例?

如果有人可以使用.net提供小样本,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

只要它是托管程序,是的,您可以在自己的AppDomain中运行它。你需要一个线程来运行代码,AppDomain.ExecuteAssembly()是一个自动开始运行该程序的Main()方法的方法。这是一个使用两个控制台模式应用程序的示例:

using System;
using System.Threading;
using System.IO;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            string exePath = @"c:\projects\consoleapplication2\bin\debug\consoleapplication2.exe";
            for (int ix = 0; ix < 10; ++ix) {
                var setup = new AppDomainSetup();
                setup.ApplicationBase = Path.GetDirectoryName(exePath);
                var ad = AppDomain.CreateDomain(string.Format("Domain #{0}", ix + 1), null, setup);
                var t = new Thread(() => {
                    ad.ExecuteAssembly(exePath);
                    AppDomain.Unload(ad);
                });
                t.Start();
            }
            Console.ReadLine();
        }
    }
}

那个跑了10次的人:

using System;

namespace ConsoleApplication2 {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("Hello from {0}", AppDomain.CurrentDomain.FriendlyName);
        }
    }
}

有一件事我没有依赖并且卡在一张桌子下面,AppDomainSetup.ApplicationBase属性没有像我预期的那样工作。我必须将EXE的完整路径传递给ExecuteAssembly(),而不是仅传递“consoleapplication2.exe”。那很奇怪。