49 lines
1.7 KiB
C#
49 lines
1.7 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Threading;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using Microsoft.Win32.SafeHandles;
|
|
|
|
namespace RDPAddins.Core
|
|
{
|
|
class EntryPoint
|
|
{
|
|
static readonly string AssemblyName = "RDPAddins.exe";
|
|
static readonly string AssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
|
static readonly string AssemblyFullPath = Path.Combine(AssemblyPath, AssemblyName);
|
|
static readonly string ConfigFileFullPath = string.Format("{0}.config", AssemblyFullPath);
|
|
|
|
[ExportDll("VirtualChannelEntry", CallingConvention.StdCall)]
|
|
public static bool VirtualChannelEntry(IntPtr entry)
|
|
{
|
|
try
|
|
{
|
|
ManualResetEvent wait = new ManualResetEvent(false);
|
|
AppDomain app = null;
|
|
var thread = new Thread(() =>
|
|
{
|
|
|
|
app = AppDomain.CreateDomain(AssemblyName, null,
|
|
new AppDomainSetup()
|
|
{
|
|
ApplicationBase = AssemblyName,
|
|
ApplicationName = AssemblyPath,
|
|
ConfigurationFile = ConfigFileFullPath
|
|
});
|
|
app.SetData("entry", entry);
|
|
app.SetData("event", wait);
|
|
app.ExecuteAssembly(AssemblyFullPath);
|
|
});
|
|
thread.SetApartmentState(ApartmentState.STA);
|
|
thread.Start();
|
|
wait.WaitOne();
|
|
return (bool)app.GetData("ret");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
} |