laatzen/ServiceFwUpdate/DllLoadTest/FrmHost.cs
2021-10-01 11:11:04 +02:00

75 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security.Policy;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Xylem.Common.Utils.AssemblyLoader;
namespace DllLoadTest
{
public partial class FrmHost : Form
{
public FrmHost()
{
InitializeComponent();
var assemblyPath = "c:\\Users\\Thomas\\Downloads\\ServiceFwUpdateSw\\";
var appDomainName = "AppDomainServiceFwUpdateSw";
var assemblyName = "Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.dll";
var className = "Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.FrmServiceFwUpdateSw";
//var domainSetup = new AppDomainSetup
//{
// ApplicationBase = assemblyPath
//};
//var appDomainEvidence = AppDomain.CurrentDomain.Evidence;
var appDomain = AppDomain.CreateDomain(appDomainName);//, appDomainEvidence, domainSetup);
var hostDomainName = AppDomain.CurrentDomain.FriendlyName;
appDomainName = appDomain.FriendlyName;
var value = (AppDomainProxy)appDomain.CreateInstanceAndUnwrap(typeof (AppDomainProxy).Assembly.FullName,
typeof (AppDomainProxy).FullName ?? string.Empty);
var _object = value.LoadAssembly(assemblyPath, assemblyName, className);
if (_object is Form formFwUpdate)
{
formFwUpdate.Show();
}
//AppDomain.Unload(appDomain);
//alternative
//var setup = AppDomain.CurrentDomain.SetupInformation;
//setup.ApplicationBase = _basePath;
//setup.ShadowCopyFiles = "true";
//var domain = AppDomain.CreateDomain("MyDomainName" + Guid.NewGuid(), null, setup);
}
}
public class AppDomainProxy : MarshalByRefObject
{
public Object LoadAssembly(String assemblyPath, String assemblyName, String className)
{
try
{
var loadedAssembly = Assembly.LoadFrom(Path.Combine(assemblyPath, assemblyName));
// find the method in fully specified class name
var type = loadedAssembly.GetType(className);
return type == null ? null : Activator.CreateInstance(type);
}
catch (Exception)
{
return null;
}
}
}
}