private AppDomainInfo(AppDomain appDomain) { this.friendlyName = appDomain.FriendlyName; this.isDefaultAppDomain = appDomain.IsDefaultAppDomain(); Process currentProcess = Process.GetCurrentProcess(); this.processName = currentProcess.ProcessName; this.machineName = Environment.MachineName; this.processId = currentProcess.Id; this.id = appDomain.Id; }
AppDomainInfo(AppDomain appDomain) { // Assumption: Only one AppDomainInfo is created per AppDomain Fx.Assert(null != appDomain, ""); this.instanceId = Guid.NewGuid(); this.friendlyName = appDomain.FriendlyName; this.isDefaultAppDomain = appDomain.IsDefaultAppDomain(); Process process = Process.GetCurrentProcess(); this.processName = process.ProcessName; this.machineName = Environment.MachineName; this.processId = process.Id; this.id = appDomain.Id; }
/// <summary> /// Loads a saved environment from the parent process. /// </summary> /// <param name="stream">The stream.</param> /// <param name="domain">The domain.</param> private static void _LoadEnvironmentFrom(Stream stream, AppDomain domain) { var formatter = new BinaryFormatter(); var environment = formatter.Deserialize(stream) as Dictionary <string, string>; var baseDirectory = environment["baseDirectory"]; var configurationFile = environment["configurationFile"]; var directoryToDeleteOnExit = new DirectoryInfo(environment["deleteOnExit"]); domain.SetupInformation.ConfigurationFile = configurationFile; // make sure we're removed from disk after exit if (domain.IsDefaultAppDomain()) { domain.ProcessExit += (s, e) => _SelfDestruct(directoryToDeleteOnExit); } else { domain.DomainUnload += (s, e) => _SelfDestruct(directoryToDeleteOnExit); } domain.UnhandledException += (s, e) => _SelfDestruct(directoryToDeleteOnExit); // catch unexpected shutdowns for console applications if (Environment.UserInteractive) { Console.CancelKeyPress += (s, e) => { if (e.SpecialKey == ConsoleSpecialKey.ControlBreak) { _SelfDestruct(directoryToDeleteOnExit); return; } if (e.SpecialKey == ConsoleSpecialKey.ControlC) { _SelfDestruct(directoryToDeleteOnExit); return; } } } ; }
public void Init(AppDomain domain, IPrinter printer = null) { (new PermissionSet(PermissionState.Unrestricted)).Assert(); if (_domain != null) { throw new InvalidOperationException("CleanupHelper can be used only for a single domain."); } if (domain == null) { throw new ArgumentNullException("domain"); } if (printer == null) { printer = new ErrorOnlyPrinter(); } _printer = printer; if (domain.IsDefaultAppDomain()) { //throw new InvalidOperationException("CleanupHelper will not work on the default AppDomain") printer.PrintError("We can't cleanup temp files if you use RazorEngine on the default Appdomain."); printer.PrintError("Create a new AppDomain and use RazorEngine from there!"); } printer.Print("init cleanup helper for {0} in {1} ...", domain.FriendlyName, AppDomain.CurrentDomain.FriendlyName); this._domain = domain; //_domain.DomainUnload += domain_DomainUnload; ObjectHandle handle = Activator.CreateInstanceFrom( _domain, typeof(SubscribeHelper).Assembly.ManifestModule.FullyQualifiedName, typeof(SubscribeHelper).FullName ); using (var subscribeHelper = (SubscribeHelper)handle.Unwrap()) { if (System.Runtime.Remoting.RemotingServices.IsTransparentProxy(printer)) { subscribeHelper.CheckPrinter(printer); } subscribeHelper.Subscribe(this); } }
public void IsDefaultAppDomain () { ad = AppDomain.CreateDomain ("ReflectionOnlyGetAssemblies"); Assert.IsFalse (ad.IsDefaultAppDomain (), "IsDefaultAppDomain"); // we have no public way to get the default appdomain }