有没有"软件关闭后自动杀掉相关后台进程"的工具

比如 wps 关闭后, 还会有多个后台进程存在.

想找一个能自动检测相关进程, 当wps.exe关闭后, 检测到相关进程会自动关闭.

不仅仅是wps, 还有很多其他软件.

所以这个工具最好能自定义关联进程.

我首先想到的是放 sandboxie 里

1 个赞

一起杀?

把 WPS 连带其他进程一起杀掉

使用 .bat 文件批量杀进程?放在环境变量里一键运行

或者使用 Quicker 这类自动化工具
根据Pid关闭进程(子程序) - 子程序信息 - Quicker
关闭进程或者窗口(子程序) - 子程序信息 - Quicker

如何实现触发,我搜了一下

检索词

  • “trigger action when process ends”
  • “Automate task after process termination”


macOS 下,借助 Keyboard Maestro 则十分无脑:

有,之前用纯c写过一个小工程AF4EX,意思就是扩展Alt+F4的功能,使用它关闭窗口时会整个结束软件
(用alt+F4作为触发条件感觉是很巧妙的设计AwA)

四年前写的了…我在这里大概理一下思路,拿到计算机后就把它重新写一遍

实现思路

面向过程,很简单:
安装键盘钩子,hook Alt+F4,如果按下,执行:
获取前台窗口所在进程P;
获取进程P可执行文件所在文件夹W;
获取W的所有祖先文件夹和所有子文件夹L1;
获取P的所有祖先进程和子进程的可执行文件所在文件夹L2;
遍历L2,如果L1某元素是L2的任意元素T的子字符串,则将所有映像名称为T的进程添加到数组K;
(危险)对于P的每一个子进程,执行上述逻辑;
杀除K。

具体实现优化、黑白名单、权限安全检查已略去。

排除Windows文件夹后,上面的规则能在减少误杀的情况下有利于完整地终止软件。
规则可能有更简单的表达…我尽力了

3 个赞

存在漏洞,部分程序必须按特定顺序kill,否则会互相保活……我记得一个什么网课程序有这个问题……

思路很好,我刚刚想写一个的(咕咕咕),不过实现思路不太一样,我是直接用户给定所有信息,程序按顺序执行taskkill

;后缀名<.exe>可以省略,目前仅支持exe型可执行文件

[example_m];不要删除示例小节
;本示例小节演示了多程序触发的情景
main_proc[] = "wps"
main_proc[] = "wpp";如果有多个用于触发的主程序就这么写
main_proc[] = "et"
main_proc[] = "wpspdf"
class[]="_WwG";必须写清该程序窗口的类名
class[]="PP12FrameClass"
class[]="XLMAIN"
class[]="Qt5QWindowIcon"
status = "AllClosed" ;有AllClosed, OneClosed, AllStarted, OneStarted, OneHidden几种状态

operation = "" ;有Start, Kill两种操作
need_proc[] = "wpswpscloudsvr" ;Kill时将顺序结束本项所写的进程,Start时比如写明程序完整路径(支持空格)
need_proc[] = "test"
tree = true ;是否结束进程树

直接删掉
\AppData\Local\Kingsoft\WPS Office\12.2.0.19805\office6\wpscenter.exe
\AppData\Local\Kingsoft\WPS Office\12.2.0.19805\office6\wpscloudlaunch.exe
\AppData\Local\Kingsoft\WPS Office\12.2.0.19805\office6\wpscloudsvr.exe
\AppData\Local\Kingsoft\WPS Office\12.2.0.19805\office6\wpscloudsvrimp.dll
:ok_hand:

删服务项, 删任务计划, 删文件, 电脑里没有需要杀后台的程序 :stuck_out_tongue:

1 个赞

同意,从根本禁止是最优解

是什么语言(好奇)ahk嘛
我的小漏洞可以简单地解决:先全部挂起,再全杀除
您也有小漏洞,taskill是命令行实用工具,在大批量调动时会很慢,尽可能使用winapi或者插件

其实想用rust写的,感觉除非一次性kill太多,对普通用户而言还是可以接受的(

调api也好办,改改就是了,思路反正就是这个样子,关键在于可以通过类名进行精准控制,别的没啥优点,缺点倒是不少,(比如有点太繁琐了配置……)

期待大佬的程序(

可以通过火绒的自定义搞搞,可操作性更高,例如允许读取、创建、删除,禁止修改、运行。
这样一来就只能创建但无法运行了,程序在试图修复的时候还会发现sha值没问题,程序权限正常且可读取,就是运行不了:doge:

啊!在等我嘛…可能没那么快能拿到含有开发环境的机子,您感兴趣的话可以先试试看

我的理想状态的工具应该是这样的:

每x秒检测A程序, 如果发现不存在A程序, 则 y秒之后关闭关联进程B/C/D
ABCD,xy 都由用户自己指定.

这么做的好处是, 不依赖关闭软件方式. 不限定特定软件.

这个大家觉得有没有逻辑上的漏洞?

没啥问题,就是可能得指定一下窗口标题或者类名,因为例如wps,有时候wps.exe也会残留,这时候就得通过类名判断是否非word、excel、ppt页面,然后再结束掉wps本身加你要结束的其他程序

对哦. 要判断下 wps 是否在前台.

我之前是用批处理,当前台进程退出的时候自动杀掉整个进程树,当然是枚举进程杀。
但是Electron开发的软件就没办法这么处理了。

?为什么呢

自己写个其实很容易。。。

每个进程退出都会触发

Power Automate就可以

AF4EX
密码:fps9

小心!未做保护处理,请保存所有工作后再尝试


六年级的时候更新的那版不够简洁,改了一些地方。最重要的判断逻辑如下伪代码所示

//path:前台窗口进程程序文件所在文件夹
//tpath:待检测进程程序文件所在文件夹
//kill(tpid):杀除待检测进程
if (path.find(tpath) != wstring::npos || 
tpath.find(path) != wstring::npos)
    kill(tpid);

看看能不能拿到电脑再更新(?)用手机写实在太累了

1 个赞