Beispiel #1
0
        private static void Main(string[] args)
        {
            var typedArgs = TypedArgs.FromArgs(args);

            var config = new RuntimeConfig();

            config.AddCodeBaseFor(typeof(Program).Assembly.GetName());
            config.AddCodeBaseFor(typeof(IPluginController).Assembly.GetName());
            config.AddCodeBaseFor(typeof(ILogService).Assembly.GetName());

            var setup = new AppDomainSetup()
            {
                ApplicationBase     = AppDomain.CurrentDomain.BaseDirectory,
                PrivateBinPath      = Environment.CurrentDirectory,
                PrivateBinPathProbe = "ExcludeAppBase",
                ConfigurationFile   = typedArgs.AssemblyFile + ".config"
            };

            setup.SetConfigurationBytes(config.GetBytes());

            var pluginDomain = AppDomain.CreateDomain("Plugin", null, setup);

            pluginDomain.AssemblyResolve += AssemblyResolve;

            var bootstrapper = (Bootstrapper)pluginDomain.CreateInstanceAndUnwrap(typeof(Bootstrapper).Assembly.FullName, typeof(Bootstrapper).FullName);

            bootstrapper.RunPluginDomain(args);
        }
Beispiel #2
0
        public void RunPluginDomain(string[] args)
        {
            var typedArgs = TypedArgs.FromArgs(args);

            parentProcess         = Process.GetProcessById(typedArgs.ParentProcessId);
            parentProcess.Exited += ParentProcessExited;
            parentProcess.EnableRaisingEvents = true;

            Dispatcher = Dispatcher.CurrentDispatcher;

            RemoteServiceLocator.InitializeIpcChannel(typedArgs.InstanceName);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(PluginLoader), "PluginLoader", WellKnownObjectMode.Singleton);

            // Signal ready
            var readyEvent = EventWaitHandle.OpenExisting(typedArgs.InstanceName + ".Ready");

            readyEvent.Set();

            Dispatcher.Run();
        }