如何在 Windows 64 位环境中对 32 位应用程序使用 TASKKILL?

如何在 Windows 64 位环境中对 32 位应用程序使用 TASKKILL?

当用户在 64 位环境中启动 32 位 .Net 应用程序时,它在任务管理器中会显示不同的名称。

例如,如果我的应用程序名称是Shipnet.Shell.exe,则在任务管理器中它会显示SH7910~1.exe*32。由于此名称更改,TASKKILL 命令执行失败。

如何获取与 TASKKILL 一起使用的正确名称?

背景信息:

我们有一款使用 Centura Team Developer 4.2(Gupta Sql Windows)开发的旧产品。从旧产品中,我们可以调用 32 位 .Net 应用程序。我的产品非常庞大,有数百个使用 Centura 和 .Net 开发的应用程序。用户可以从主菜单(Centura 和 .Net)启动多个应用程序。主菜单屏幕中有一个注销菜单。当用户单击此菜单时,我们的产品会关闭所有 Centura 和 .Net 应用程序。Centura 在关闭过程中会处理自己的应用程序。我们使用 TASKKILL 命令关闭从我们的产品启动的所有 .Net 应用程序。这在 Windows 32 位环境中运行良好。当我们在 Windows 64 位环境中部署相同的产品时,我们的产品无法关闭 .Net 应用程序。原因是 TASKKILL 命令无法获取应用程序的正确名称。

答案1

您可以使用TASKLIST窗口标题、进程名称或其他条件来获取 PID,如下所示:

tasklist /FI "WINDOWTITLE eq notepad"

这将列出所有进程,其中窗口名称等于“记事本”。

示例输出:

C:\windows\system32>tasklist /FI "WINDOWTITLE eq Untitled - Notepad"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
notepad.exe                   1876 Console                    1      7,156 K

可用的过滤器有:

Filters:
    Filter Name     Valid Operators           Valid Value(s)
    -----------     ---------------           --------------------------
    STATUS          eq, ne                    RUNNING |
                                              NOT RESPONDING | UNKNOWN
    IMAGENAME       eq, ne                    Image name
    PID             eq, ne, gt, lt, ge, le    PID value
    SESSION         eq, ne, gt, lt, ge, le    Session number
    SESSIONNAME     eq, ne                    Session name
    CPUTIME         eq, ne, gt, lt, ge, le    CPU time in the format
                                              of hh:mm:ss.
                                              hh - hours,
                                              mm - minutes, ss - seconds
    MEMUSAGE        eq, ne, gt, lt, ge, le    Memory usage in KB
    USERNAME        eq, ne                    User name in [domain\]user
                                              format
    SERVICES        eq, ne                    Service name
    WINDOWTITLE     eq, ne                    Window title
    MODULES         eq, ne                    DLL name

然后您可以使用taskkill并提供PID。

TASKKILL /PID 1230 /PID 1241 /PID 1253 /T

/t终止进程及其子进程,/PID指定进程 ID。

如果你有 powershell 可以使用Stop-Process <pid>(例如Stop-Process 3512)或Stop-Process -processname notepad

有更多信息这里在 Stop-Process 命令上。

如果您提供遇到问题的操作系统名称,那将非常有用,在 64 位操作系统中名称被截断为 DOS-STYLE 的情况极为罕见!

答案2

我这里也遇到了类似的问题。一个 32 位进程拒绝终止。我会在进程 8152 下的任务列表中找到它。以下是后续步骤:

C:\Users\Smurf>taskkill /pid 8152 /t 错误:无法终止 PID 为 8152 的进程(PID 为 7788 的子进程)。原因:Toegang geweigerd。

C:\Users\Smurf>taskkill /pid 7788 /t 错误:未找到进程“7788”。

Toegand geweigerd 是“不允许访问”。我已授予自己所有权限,因此 ProcExp 中的进程也是如此。我想知道如何终止这个不需要的进程......

相关内容