예제 #1
0
        public static void RunInSeparateAppDomain(AppDomainSetup setup, Action action)
        {
            var dir = Path.GetDirectoryName(typeof(AppDomainUtils).Assembly.CodeBase)
                      .Replace("file:\\", "");

            setup.PrivateBinPath        = dir;
            setup.ApplicationBase       = dir;
            setup.ApplicationName       = Guid.NewGuid().ToString();
            setup.ShadowCopyFiles       = "true";
            setup.ShadowCopyDirectories = setup.ApplicationBase;
            setup.CachePath             = Path.Combine(Path.GetTempPath(), setup.ApplicationName);

            AppDomain appDomain = null;

            try
            {
                appDomain = AppDomain.CreateDomain(setup.ApplicationName, null, setup);
                AppDomainHelper helper =
                    appDomain.CreateInstanceAndUnwrap(
                        typeof(AppDomainUtils).Assembly.FullName,
                        typeof(AppDomainHelper).FullName
                        ) as AppDomainHelper;
                helper.Run(action);
            }
            finally
            {
                if (appDomain != null)
                {
                    AppDomain.Unload(appDomain);
                }
            }
        }
예제 #2
0
        public static void RunInSeparateAppDomain(AppDomainSetup setup, Action action)
        {
            var dir = Path.GetDirectoryName(typeof(AppDomainUtils).Assembly.CodeBase).Replace("file:\\", "");

            setup.PrivateBinPath  = dir;
            setup.ApplicationBase = dir;
            var             appdomain = AppDomain.CreateDomain(new Guid().ToString(), null, setup);
            AppDomainHelper helper    = appdomain.CreateInstanceAndUnwrap(typeof(AppDomainUtils).Assembly.FullName, typeof(AppDomainHelper).FullName) as AppDomainHelper;

            helper.Run(action);
        }