【问题标题】:Prevent process kill in appdomain防止 appdomain 中的进程终止
【发布时间】:2015-02-07 13:22:42
【问题描述】:

有没有办法设置 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();引发异常,因为它是被禁止的。 我试图在应用程序域的设置过程中找到一些设置证据和/或权限集的方法来防止这种情况,但没有成功:

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

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

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

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

【问题讨论】:

  • 我认为this 回答了你的问题:不可能。
  • AFAIK Process.Kill 不可捕获

标签: c# process appdomain kill-process


【解决方案1】:

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

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.
}

【讨论】:

  • 有帮助,但在没有任何内容可添加到事件处理程序时无用。
猜你喜欢
  • 2020-11-02
  • 1970-01-01
  • 2012-01-28
  • 2015-12-25
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多