从命令行关闭程序 (Windows)

neo*_*Dev 55 windows command-line

从命令行关闭/退出程序的正确方法是什么,类似于按窗口角落的“X”关闭按钮?

我试图在 3 个不同版本的 Windows 下关闭 chrome:win7 Ultimate、win7 home、winXP

在 Ultimate 和 XP 下: TSKILL chrome

在主页下:TASKKILL /IM chrome.exe


TSKILL chrome:

(它关闭 chrome,没有 cmd 错误,
但重新启动时chrome 错误恢复


TASKKILL /IM chrome.exe

(它关闭 chrome,重新启动时没有 chrome 错误,
但 cmd 中出现错误:“无法终止子进程(大约 4-5 个),只能通过强制使用/F”)


如果重新启动 chrome 显示没有错误,我是否应该忽略 cmd 子错误?

Dav*_*ann 47

关闭/退出程序的正确方法最终取决于软件。但是,通常最佳做法是让 Windows 程序在收到 WM_CLOSE 消息时关闭。正确释放内存并关闭句柄。还有其他消息可以表示应用程序的关闭,但是如何处理每条消息取决于软件的作者。

taskkill /IM process.exe
Run Code Online (Sandbox Code Playgroud)

taskkill 发送 WM_CLOSE 消息,然后由应用程序是否正确关闭。您可能还想使用该/T选项来向子进程发送信号。

/F当您想强制终止进程时才使用该选项。

其他选项包括发送 Alt+F4 键、使用 PowerShell 或 3rd 方应用程序。

更新到更新的问题

忽略,错误。 Chrome 会生成许多进程。当进程不确认 TASKKILL 发送的 WM_CLOSE 消息时会导致错误。只有具有消息循环的进程才能接收消息,因此,没有消息循环的进程将产生该错误。最有可能的是,这些进程是 chrome 扩展和插件。

隐藏错误捕获输出

taskkill /IM chrome.exe >nul
Run Code Online (Sandbox Code Playgroud)

总结: TASKKILL 是通过命令行关闭应用程序的正确方法,每个 WM_CLOSE 实现和我链接Microsoft KB

  • [`>` 是 cmd.exe 的重定向操作符](http://www.robvanderwoude.com/battech_redirection.php),而 `nul` 是空间的空白,在那里事情将永远不会再被听到。 (10认同)

Sco*_*hee 10

尝试NirCmd(下载:x86 x64

它具有“closeprocess”命令,旨在优雅地关闭进程。根据其文档,它不会终止应用程序,而是发送WM_CLOSE到目标进程的所有顶级窗口。

用法示例:

nircmd closeprocess chrome.exe

如果这不起作用,我敢打赌您的应用程序有一个不寻常的清理程序。我想看看里面发生了什么,所以请让我知道你的目标应用程序是什么。


Jde*_*eBP 3

有一些命令行实用程序可以将合适的WM_SYSCOMMAND消息(作为SC_CLOSE命令)发送到程序的顶级窗口。我确信很快就会至少提到一个。(然后有人会提到 AutoIt。然后会有一个答案展示如何使用 PowerShell 和 来做到这一点CloseMainWindow()。)

JP Software 的 TCC (Windows 的命令解释器和命令脚本处理器)中作为内置命令提供的命令行实用程序称为TASKEND