1. 什么是应用程序域(application Domain)
应用程序域是一个逻辑容器,容许多个程序集在一个进程中执行,但是不容许直接访问对方的内存
2. 作用
应用程序域比多进程效率更高,安全,可靠
- AppDomain d = AppDomain.CreateDomain("NewDomain");//创建一个应用程序域
- Console.WriteLine("Host domain:"+AppDomain.CurrentDomain.FriendlyName);//得到当前的工程名
- Console.WriteLine("Child domain:" + d.FriendlyName);//得到程序域名NewDomain
- // d.ExecuteAssembly("Assembly.exe");
- d.ExecuteAssemblyByName("Assembly");//包含要执行程序集的文件的名称
- AppDomain.Unload(d);//卸载程序集
第二节
3. 使用应用程序域加载权限受限的程序集的最简单方法是指定受限区域,比如互联网区域,作为证据
4. 为配置程序域属性,创建AppDomainSetup类的实例,创建程序域时使用该实例
- object[] hostEvidence = { new Zone(SecurityZone.Internet)};//代码安全组
- Evidence internetEvidence = new Evidence(hostEvidence, null);//提证据供
- AppDomain myDomain = AppDomain.CreateDomain("Mydomain");//创建应用程序域
- myDomain.ExecuteAssembly("SecondAssembly.exe", internetEvidence);//为程序集赋证据,控制赋给程序集的权限
- //object[] hostEvidence = { new Zone(SecurityZone.Internet) };
- //Evidence appDomainEvidence = new Evidence(hostEvidence, null);
- //AppDomain d = AppDomain.CreateDomain("MyDomain", appDomainEvidence);
- //d.ExecuteAssembly("SecondAssembly.exe");
- AppDomainSetup ads = new AppDomainSetup();//更改 AppDomainSetup 实例的属性不会影响任何现有的 AppDomain。这种属性更改只会影响到新 AppDomain 的创建
- ads.ApplicationBase = "file://" + System.Environment.CurrentDirectory;
- //ApplicationBase 属性定义应用程序的根目录
- ads.DisallowBindingRedirects = false;
- ads.DisallowCodeDownload = true;
- ads.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
- AppDomain s = AppDomain.CreateDomain("New Domain",null,ads);
第三节
5. 服务程序可以在后台执行,无需用户交互
6. 服务程序对于持续监听某个任务非常有用
7. 服务程序适合长期稳定执行且不需要用户交互的情况
8. 服务程序与其他类型程序的区别: 服务应用程序工程编译后的可执行文件必须经过安装才能起作用,不能按F5或F11调试运行服务程序,不能立即运行程序并跟踪代码;可以先运行服务,然后将调试器粘贴到服务进程上进行调试
不像其他类型的工程,必须为服务程序制作安装组件,安装组件将安装并注册服务程序到服务器,并用windows服务控制管理器为服务创建入口
服务程序的Main方法必须发布工程包含的服务的运行(Run)命令,Run方法加载服务到适当的服务器的服务控制管理器;如果你使用windows服务工程模板创建服务,Run方法会自动生成
服务程序运行在一个不同的window场景(window station),登录用户使用交互场景;window场景是一个安全对象,它包含剪切板、一套全局atom和一组桌面对象;因为服务程序的场景不是交互场景,所以看不到服务程序发起的对话框,如果看到将会使你的程序停止响应,所以,错误信息将会记录到系统日志,而不会显示在用户界面中
服务程序在自己的上下文中执行,它在用户登录操作系统之前就会启动;你需要自己规划哪个用户账号可以执行服务程序,在系统账号执行的服务比不同账号拥有许可和特权;权限越大就越容易被攻击者利用,所以尽量让服务程序在尽量少的权限下执行以降低安全风险
具体代码见本人上传