【问题标题】:How to prevent the Kill() process by another? [duplicate]如何防止另一个进程的 Kill() 进程? [复制]
【发布时间】:2016-02-09 05:02:26
【问题描述】:

在 C# 中,可以阻止另一个(用户或程序)的 Kill() 进程??

我只想通过“关闭按钮”关闭我的应用程序并阻止其他方式。

【问题讨论】:

  • 不(除非您的进程是 rootkit)。
  • 你做不到。任何进程都可以调用进程的终止。
  • 所以当你程序挂起时,我没有办法关闭它。非常感谢,但没有。
  • 那将是一个糟糕的设计,如果你的应用程序崩溃它永远无法关闭(你好内存泄漏)。如果您想防止针对它运行终止进程,听起来您正在开发一个有问题的应用程序。

标签: c#


【解决方案1】:

我已经使用 C# 多年,但从未遇到过这样的机制。您需要某种方式来告诉操作系统当前进程受到某种保护而不会被杀死。实际上,这可能更像是一个操作系统问题而不是语言问题。

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • “无法完成”不是答案吗?
【解决方案2】:

唯一的方法是创建一个 Windows 服务而不是一个简单的进程。这样,我认为您可以在 Windows 服务选项卡中告诉它始终处于活动状态并尽可能多地执行它。例如:

    protected override void OnStart(string[] args)
    {
        timer = new Timer();
        timer.Interval = 12000; //Execute the process every 12 seconds
        timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Tick);
        timer.Enabled = true;
    }

    private void timer_Tick(object sender, ElapsedEventArgs e)
    {
        try {
            Runner.WriteErrorLog("Timer ticked and some job has ben called!");
            Runner.Start();
            Runner.WriteErrorLog("Job done!!");
        }
        catch (Exception ex)
        {
            Runner.WriteErrorLog("ERROR!!! " + ex.Message);
        }
    }

这不会阻止您的进程终止,但它可以让您阅读日志并查看它是否已被终止并重新启动它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多