gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:36 27 4
gpt4 key购买 nike

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

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

如果有人也可以使用 .net 提供一个小示例,我将不胜感激。

最佳答案

只要它是托管程序,是的,您可以在其自己的 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);
}
}
}

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

关于c# - 是否可以在多个应用程序域中并行运行相同的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com