Возможно ли, чтобы одно приложение работало в нескольких доменах приложений параллельно? - PullRequest
1 голос
/ 29 октября 2010

Допустим, у меня есть служба Windows под названием «MyService» и исполняемый файл «MyEXE»

Возможно ли (изнутри «MyService») запустить несколько экземпляров «MyEXE», работающих в отдельных доменах приложенийв параллели?

Буду признателен, если кто-нибудь также предоставит небольшой образец, используя .net.

1 Ответ

4 голосов
/ 29 октября 2010

Пока это управляемая программа, да, вы можете запускать ее в своем собственном домене приложений.Вам понадобится поток для запуска кода, 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».Это было странно.

...