进程是存在独立的内存和资源的,但是AppDomain仅仅是逻辑上的一种抽象。一个process可以存在多个AppDomain。各个AppDomain之间的数据时相互独立的。一个线程可以穿梭多个AppDomain。
一、属性
ActivationContext | 获取当前应用程序域的激活上下文。 |
ApplicationIdentity | 获得应用程序域中的应用程序标识。 |
ApplicationTrust | 获取授予应用程序的权限以及应用程序是否拥有允许其运行的信任级别的信息。 |
BaseDirectory | 获取基目录,它由程序集冲突解决程序用来探测程序集。 |
CurrentDomain | 获取当前 Thread 的当前应用程序域。 |
DomainManager | 获得初始化应用程序域时主机提供的域管理器。 |
DynamicDirectory | 获取目录,它由程序集冲突解决程序用来探测动态创建的程序集。 |
Evidence | 获取与该应用程序域关联的 Evidence。 |
FriendlyName | 获取此应用程序域的友好名称。 |
Id | 获得一个整数,该整数唯一标识进程中的应用程序域。 |
IsFullyTrusted | 获取一个值,该值指示加载到当前应用程序域的程序集是否以完全信任执行的。 |
MonitoringSurvivedMemorySize | 获取或设置一个值,该值指示是否对当前进程启用应用程序域的 CPU 和内存监视。 一旦对进程启用了监视,则无法将其禁用。 |
MonitoringSurvivedMemorySize | 获取上次完全阻止回收后保留下来的、已知由当前应用程序域引用的字节数。 |
MonitoringSurvivedProcessMemorySize | 获取进程中所有应用程序域的上次完全阻止回收后保留下来的总字节数。 |
MonitoringTotalAllocatedMemorySize | 获取自从创建应用程序域后由应用程序域进行的所有内存分配的总大小(以字节为单位,不扣除已回收的内存)。 |
MonitoringTotalProcessorTime | 获取自从进程启动后所有线程在当前应用程序域中执行时所使用的总处理器时间。 |
IsHomogenous | 获取一个值,该值指示当前应用程序域是否拥有为加载到该应用程序域的所有程序集授予的权限集。 |
MonitoringIsEnabled | 获取或设置一个值,该值指示是否对当前进程启用应用程序域的 CPU 和内存监视。 一旦对进程启用了监视,则无法将其禁用。 |
PermissionSet | 获取沙盒应用程序域的权限集。 |
RelativeSearchPath | 获取基目录下的路径,在此程序集冲突解决程序应探测专用程序集 |
SetupInformation | 获取此实例的应用程序域配置信息。 |
ShadowCopyFiles | 获取应用程序域是否配置为影像副本文件的指示。 |
public class Program
{
static void Main(string[] args)
{
AppDomain appdomain = AppDomain.CurrentDomain; //获取当前 Thread 的当前应用程序域。
Console.WriteLine(appdomain.Id); //输出 1 获得一个整数,唯一标识进程中的应用程序域。
Console.WriteLine(appdomain.ActivationContext); //输出 空白 获取当前应用程序域的激活上下文。
Console.WriteLine(appdomain.ApplicationIdentity); //输出 空白 获得应用程序域中的应用程序标识。
ApplicationTrust AT = appdomain.ApplicationTrust; //获取说明授予应用程序的权限以及应用程序是否拥有允许其运行的信任级别的信息。
Console.WriteLine(appdomain.ApplicationTrust); //输出 System.Security.Policy.ApplicationTrust
Console.WriteLine(appdomain.BaseDirectory); //输出 F:\xxx\xxx\ConsoleApplication1\bin\Debug\ 获取基目录,它由程序集冲突解决程序用来探测程序集。
Console.WriteLine(appdomain.DomainManager); //输出 Microsoft.VisualStudio.HostingProcess.VSHostAppDomainManager
Console.WriteLine(appdomain.DynamicDirectory); //输出 空白 获取目录,它由程序集冲突解决程序用来探测动态创建的程序集。
Evidence ed = appdomain.Evidence; //另外一个东西了 获取与该应用程序域关联的 Evidence。
Console.WriteLine(appdomain.Evidence.ToString()); //输出 System.Security.Policy.Evidence
Console.WriteLine(appdomain.FriendlyName); //输出 ConsoleApplication1.vshost.exe 获取此应用程序域的友好名称。
Console.WriteLine(appdomain.IsFullyTrusted); //输出 True 获取一个值,该值指示加载到当前应用程序域的程序集是否是以完全信任方式执行的。
Console.WriteLine(appdomain.IsHomogenous); //输出 True 获取一个值,该值指示当前应用程序域是否拥有一个为加载到该应用程序域的所有程序集授予的权限集。
Console.WriteLine(AppDomain.MonitoringIsEnabled); //输出 False 获取或设置一个值,该值指示是否对当前进程启用应用程序域的 CPU 和内存监视。 一旦对进程启用了监视,则无法将其禁用。
AppDomain.MonitoringIsEnabled = true;
//要上面那个属性启用之后,这个属性才能用
Console.WriteLine(appdomain.MonitoringSurvivedMemorySize); //输出 0 获取上次完全阻止回收后保留下来的、已知由当前应用程序域引用的字节数。
Console.WriteLine(appdomain.MonitoringTotalAllocatedMemorySize); //输出 0 获取自从创建应用程序域后由应用程序域进行的所有内存分配的总大小(以字节为单位,不扣除已回收的内存)。
Console.WriteLine(appdomain.MonitoringTotalProcessorTime); //输出 00:00:00 获取自从进程启动后所有线程在当前应用程序域中执行时所使用的总处理器时间。
System.Security.PermissionSet ps = appdomain.PermissionSet; //获取沙盒应用程序域的权限集。
Console.WriteLine(appdomain.PermissionSet.ToString()); //输出 <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true"/>
Console.WriteLine(appdomain.RelativeSearchPath); //输出 空白
Console.WriteLine(appdomain.SetupInformation); //输出 AppDomainSetup 获取此实例的应用程序域配置信息。
Console.WriteLine(appdomain.ShadowCopyFiles); //输出 False
File.WriteAllText(@"D:\123.txt", appdomain.PermissionSet.ToString());
//SetupInformation 获取此实例的应用程序域配置信息
//ShadowCopyFiles 获取应用程序域是否配置为影像副本文件的指示。
Console.ReadKey();
}
二、方法
名称 | 说明 |
ApplyPolicy | 返回应用策略后的程序集显示名称。 |
CreateComInstanceFrom(String, String) | 创建指定 COM 类型的新实例。 形参指定文件的名称,该文件包含含有类型和类型名称的程序集。 |
CreateDomain(String) | 使用指定的名称新建应用程序域。 |
CreateInstance(String, String) | 创建在指定程序集中定义的指定类型的新实例。 |
CreateInstanceAndUnwrap(String, String) | 创建指定类型的新实例。 形参指定定义类型的程序集以及类型的名称。 |
CreateInstanceFrom(String, String) | 创建在指定程序集文件中定义的指定类型的新实例。 |
CreateObjRef | 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。) |
DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) | 以指定名称和访问模式定义动态程序集。 |
DoCallBack | 在另一个应用程序域中执行代码,该应用程序域由指定的委托标识。 |
ExecuteAssembly(String) | 执行指定文件中包含的程序集。 |
ExecuteAssemblyByName(String) | 在给定其显示名称的情况下执行程序集。 |
GetAssemblies | 获取已加载到此应用程序域的执行上下文中的程序集。 |
GetData | 为指定名称获取存储在当前应用程序域中的值。 |
GetLifetimeService | 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。) |
InitializeLifetimeService | 通过防止创建租约来给予 AppDomain 无限生存期。 (重写 MarshalByRefObject.InitializeLifetimeService()。) |
IsCompatibilitySwitchSet | 获取可以为 null 的布尔值,该值指示是否设置了任何兼容性开关,如果已设置,则指定是否设置了指定的兼容性开关。 |
IsDefaultAppDomain | 返回一个值,指示应用程序域是否是进程的默认应用程序域。 |
IsFinalizingForUnload | 指示此应用程序域是否正在卸载以及公共语言运行时是否正在终止该域包含的对象。 |
Load(AssemblyName) | 在给定 AssemblyName 的情况下加载 Assembly。 |
ReflectionOnlyGetAssemblies | 返回已加载到应用程序域的只反射上下文中的程序集。 |
SetData(String, Object) | 为指定的应用程序域属性分配指定值。 |
SetData(String, Object, IPermission) | 将指定值分配给指定应用程序域属性,检索该属性时要求调用方具有指定权限。 |
SetPrincipalPolicy | 指定在此应用程序域中执行时如果线程尝试绑定到用户,用户和标识对象应如何附加到该线程。 |
SetThreadPrincipal | 设置在以下情况下要附加到线程的默认主体对象,即当线程在此应用程序域中执行时,如果线程尝试绑定到主体这种情况。 |
Unload | 卸载指定的应用程序域。 |
其实我经常使用AppDomin类的地方就是获取当前程序根目录:
static void Main(string[] args)
{
string exeStr=System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,"xx.exe");
System.Console.ReadKey();
}