xiaolizi007
1/7/2017 - 9:52 AM

AppDomain Demo

AppDomain #csharp

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security;
using System.Security.Permissions;
using System.Reflection;
using System.Threading;

namespace AppDomainNameSpace
{
    class Program
    {
        static void Main(string[] args)
        {
            var perm = new PermissionSet(PermissionState.None);
            perm.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
            perm.AddPermission(new FileIOPermission(FileIOPermissionAccess.NoAccess,@"C:\"));
            var setup = new AppDomainSetup();
            setup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
            //构建AppDomain
            AppDomain securedDomain = AppDomain.CreateDomain("securedDomain", null, setup, perm);
            try
            {
                Type thirdparty = typeof(ThridParty);
                securedDomain.CreateInstanceAndUnwrap(thirdparty.Assembly.FullName, thirdparty.FullName);
            }
            catch (Exception)
            {
                AppDomain.Unload(securedDomain);
            }

            //default appdomain
            object1 obj = new object1();
            Console.WriteLine("默认的appdomain已经启动");
            Console.ReadKey();
        }
    }
    class ThridParty
    {
        public ThridParty()
        {
            Console.WriteLine("Third party loaded");
            System.IO.File.Create(@"C:\1.txt");

        }
    }
    class object1
    {

    }
}