Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Windows Powershell-在软件发布时-如何在软件部署之前杀死不可修复的进程而不重新启动_.net_Powershell_Console_Windows Server 2012_Windows Server 2019 - Fatal编程技术网

.net Windows Powershell-在软件发布时-如何在软件部署之前杀死不可修复的进程而不重新启动

.net Windows Powershell-在软件发布时-如何在软件部署之前杀死不可修复的进程而不重新启动,.net,powershell,console,windows-server-2012,windows-server-2019,.net,Powershell,Console,Windows Server 2012,Windows Server 2019,我有一系列的问题,这些问题本身并不是唯一的,但总体上是非常独特的。我有一系列助手控制台应用程序(C#),它们可以执行各种操作,如连接和修改SSAS数据库、访问外部API等。。。它们定期从SQL代理作业调用 每隔一段时间,由于一些完全未知的原因,这些控制台应用程序中的一个会变得无响应,这可能会导致SQL代理程序锁定,或者它可能会继续运行,但您无法重新启动服务,它有点放弃进程,因此进程正在运行,但什么也不做,它不会消耗CPU周期,也不会占用大量内存,但它是“不可修复的”,即您无法通过任务管理器或任何

我有一系列的问题,这些问题本身并不是唯一的,但总体上是非常独特的。我有一系列助手控制台应用程序(C#),它们可以执行各种操作,如连接和修改SSAS数据库、访问外部API等。。。它们定期从SQL代理作业调用

每隔一段时间,由于一些完全未知的原因,这些控制台应用程序中的一个会变得无响应,这可能会导致SQL代理程序锁定,或者它可能会继续运行,但您无法重新启动服务,它有点放弃进程,因此进程正在运行,但什么也不做,它不会消耗CPU周期,也不会占用大量内存,但它是“不可修复的”,即您无法通过任务管理器或任何其他方式阻止它。看起来像这样:

这些可以堆叠,有时在一个盒子上会有多个无响应的进程。清除此混乱的唯一方法是重新启动服务器。我有,但没有成功

这会导致我的自动发布过程出现严重问题,我的控制台应用程序会定期更新,当出现这种情况且出现此问题时,当您尝试复制到应用程序文件夹并将覆盖标志设置为true时,会出现以下情况(在本例中为Robocopy,但您可以想象这在任何其他工具中也是一个问题):

2020-10-23T18:24:36.9534370Z 2020/10/23 13:24:36错误32(0x00000020) 复制文件 XXX\Autofac.dll 2020-10-23T18:24:36.9535263Z进程无法访问该文件 因为它正被另一个进程使用

同样要解决这个问题,您需要手动重新启动服务器,然后重新运行发行版,这是一个很大的难题。我想做的是找到一种方法,通过Powershell以编程方式杀死一个“无法解决的”进程,而无需重新启动我的机器。

当你开始四处寻找解决方法时,你很快就会发现在这一点上有一些相互矛盾的说法。首先:

因此,用户可以杀死任何他们想要的进程(给予足够的特权), 他们可以阻止任何程序窃取焦点,也可以删除任何程序 他们想要的文件(同样,给予足够的特权)

@Ralphteninja与此密切相关。然而,如果你深入挖掘,你会发现有许多方法,尽管不是官方支持的,也不是100%可靠的方法。最流行和最常提到的“不可推卸过程”的原因是的问题。由于我没有使用我知道的任何驱动程序,并且在不同的服务器和windows版本中看到此问题,并且在执行各种不同操作的多个控制台应用程序中看到此问题,因此我相信这些方法或解释都与我的问题没有任何关系

如果我退后一步,看看windows中“流程”的整个概念,我认为这类问题更多地与Microsoft和其他各方在流程管理方面缺乏明确的方向和一致的陈述有关,总结如下:

  • 目前尚不清楚拥有完全访问权限的管理员是否“应该” 允许杀光所有人(我真正的意思是“所有人”这个词的字面意思,而不是 隐喻)通过powershell(或任何其他方法,如 作为任务管理器)

  • 不清楚任务应该/可以在powershell或UI中使用哪个命令/方法终止(由 在用户界面中的扩散,以及各种方式 ),“停止过程”显然是首选, “停止进程”

  • 不清楚任务应该/不能终止的原因是什么,如何解决这些原因,以及我们这些没有发展的人 窗口设备驱动程序(其他的则是笼统的语句,例如)如何诊断和确定我们开发的应用程序在windows中变得“不可修复”的根本原因

  • 我尚未发现(有重大研究):

    • 一个单一的原因或一系列的原因来解释为什么一个过程会变得不可质疑

    • 诊断此类问题的权威指南(在 C#或任何其他语言,不包括特定于驾驶员的指南 发展)

    • 了解终止进程的不同方式的指南,不仅解释了社区(stack和其他人)如何终止进程,而且解释了为什么终止进程 做同一件事有很多不同的方法,最重要的是 为什么每种不同的方法在特定的过程中都会起作用或不起作用

    在每次软件发布之前重新启动服务器(或其他与流程无关的解决方法)是否是解决此问题的唯一方法