c# - 防止应用程序域中的进程终止

标签 c# process appdomain kill-process

有没有一种方法可以设置 AppDomain 的权限,使得在其中运行的代码无法终止启动它的进程?

更准确地说,假设我有一个 AppDomain appDomain,我想做类似的事情

try
{
    appDomain.ExecuteAssembly("someAssembly.exe");
}catch(SomeForbiddenActionException e){

    Console.WriteLine("someAssembly tried to perform some forbidden action")
}

假设 someAssembly.exe 执行以下代码:

static void Main(){
    Process.GetCurrentProcess().Kill();
}

目前,如果我运行上面的代码,整个应用程序退出,我想不惜一切代价避免这种情况,我想调用 Process.GetCurrentProcess().Kill();引发异常,因为它是被禁止的。 我试图在应用程序域的设置过程中找到一些设置 Evidence 和/或 PermissionSet 的方法来防止这种情况发生但没有成功:

http://msdn.microsoft.com/en-us/library/bb763046%28v=vs.110%29.aspx

没有给我任何关于如何实现我的目标的线索。

appDomain.ProcessExit 只是一个在进程已经退出时调用一些代码的机会 => 不是一个好的选择

非常欢迎任何帮助或线索,谢谢!

最佳答案

您可以订阅正在退出的进程,但我不确定这是否会帮助您防止进程被终止。

MSDN info

var myProcess =  Process.GetCurrentProcess();
myProcess.Exited += new EventHandler(myProcess_Exited);

private void myProcess_Exited(object sender, System.EventArgs e)
{
     //not sure if there is a way to prevent the process from exiting here.
}

关于c# - 防止应用程序域中的进程终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382540/

相关文章:

java - 数据库查询以获取范围内的记录

c - 使用 fork 和 exec 启动进程,同时将 stdout 重定向到/dev/null

c# - AppDomain 隔离问题

c# - Util.CreateAppDomain 在 LINQPad 中失败

c# - 如果有更多方法,C#类是否会占用更多空间?

c# - 使用 webclient c# 检查 URL 是否为下载链接

c# - 在 Switch 语句中使用 .StartsWith?

scala - 如何在 Scala 中运行外部进程并获取退出代码和输出?

linux - 可执行文件上的 setuid 似乎不起作用

c# - 使用 IDisposable 时卸载 AppDomain