第16章 进程、应用程序域和对象上下文
2015-08-10 10:24
162 查看
一、进程
一个 正在运行的应用程序 的 固定的安全边界(每个进程都有个唯一标识符PID)System.Diagnostics.Process
1、列举运行中的进程
//System.Diagnostics.Process 类型的数组,它表示指定计算机上运行的所有进程资源 var runingProcess = from proc in Process.GetProcesses(".") orderby proc.Id select proc; foreach (var p in runingProcess) { Console.WriteLine("进程id={0},进程名={1}.",p.Id,p.ProcessName); }
2、获得指定进程
Process theProc = Process.GetProcessById(1524); Console.WriteLine("进程id={0},进程名={1}.",theProc.Id,theProc.ProcessName);
3、获得进程的线程集合
Process theProc = Process.GetProcessById(1524); ProcessThreadCollection theThreads = theProc.Threads;//获得进程中运行的一组线程 foreach(ProcessThread pt in theThreads) { Console.WriteLine("线程ID={0},开始时间={1},优先级={2}",pt.Id,pt.StartTime.ToShortDateString(),pt.PriorityLevel); }
4、进程中模块集合
Process theProc = Process.GetProcessById(1524); ProcessModuleCollection theMods = theProc.Modules;//获得进程中的*dll或.exe本身 foreach (ProcessModule pm in theMods) { Console.WriteLine("进程中的模块名={0}",pm.ModuleName); }
5、编程方式 启动或结束进程
Process ieProc = null; try { ieProc = Process.Start("IExplore.exe","www.xx.com");//启动IE进程 } catch(InvalidOperationException ex) { Console.WriteLine(ex.Message); } Console.Write("按回车杀死进程:{0}",ieProc.ProcessName); Console.ReadLine(); try { ieProc.Kill();//杀死进程 } catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); }
二、.NET 可执行程序 承载在 应用程序域(进程的逻辑分区)
System.AppDomain1、与默认应用程序域进行交互
//访问当前线程的应用程序域 AppDomain defaultAD = AppDomain.CurrentDomain; Console.WriteLine("应用程序域名称:{0}",defaultAD.FriendlyName); Console.WriteLine("应用程序域 ID:{0}",defaultAD.Id); Console.WriteLine("是否是默认应用程序域:{0}",defaultAD.IsDefaultAppDomain()); Console.WriteLine("应用程序域路径:{0}",defaultAD.BaseDirectory); Console.ReadLine();
效果:
2、枚举加载程序集
//访问当前线程的应用程序域 AppDomain defaultAD = AppDomain.CurrentDomain; Assembly[] loadedAssemblies = defaultAD.GetAssemblies();//应用程序域中加载的程序集 foreach(Assembly a in loadedAssemblies) { Console.WriteLine("程序集名:{0},版本:{1}",a.GetName().Name,a.GetName().Version); } Console.ReadLine();
3、加载程序集时,发生
//访问当前线程的应用程序域 AppDomain defaultAD = AppDomain.CurrentDomain; defaultAD.AssemblyLoad += (o, s) => { Console.WriteLine(s.LoadedAssembly.GetName().Name);//程序集简单名 }; Console.ReadLine();
4、创建新的应用程序域
AppDomain newAd = AppDomain.CreateDomain("secondappdomain");
5、自定义应用程序域中加载程序集
newAd.Load("CarLibrary");//将CarLibrary.dll加载到新域中
6. 卸载应用程序域
AppDomain.Unload(newAd);
三、上下文边界
1、定义上下文绑定对象//自动线程安全类 SportsCarTS [Synchronization] class SportsCarTS : ContextBoundObject//加载到一个同步的上下文中 { }
相关文章推荐
- html借助一般处理程序实现文件上传到服务器
- 限制root用户只能通过证书登录
- 8月6日全球六大国际域名解析量变化情况统计报告
- flex bison 笔记
- NYOJ 1221 找数达人(01背包)
- POJ 1159 Palindrome(DP + 滚动数组)
- HDU 1198 Farm Irrigation 并查集
- SAP服务器性能管理常用的功能解析
- tarjan算法求强连通分量
- PXN防护技术的研究与绕过
- android两种圆形进度条
- 杭电(hdu)ACM 2084 数塔
- cygwin和mingw的区别
- 什么是队列(Queue)?
- easyui中带checkbox框的tree
- 总结Java集合类操作优化经验
- java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been calle
- [leetcode-92]Reverse Linked List II(c++)
- valgrind+kvalgrind
- JS函数式编程【译】3.1 Javascript的函数式库