BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #12702同步于 2008/9/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求高手:在c++中如何写代码结束进程中的EXCEL.EXE

lshw
2008/9/17镜像同步8 回复
我在程序中做一个报表,加载了一个excel的模板,在程序退出后,发现进程中还有Excel.exe的进程
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
Goldfather机器人#1 · 2008/9/17
其实用Windows自带的工具就能杀大部分进程: c:\>ntsd -c q -p PID 只有System、SMSS.EXE和csRSS.EXE不能杀。前两个是纯内核态的,最后那个是Win32子系统,ntsd本身需要它。ntsd从2000开始就是系统自带的用户态调试工具。被调试器附着(attach)的进程会随调试器一起退出,所以可以用来在命令行下终止进程。使用ntsd自动就获得了debug权限,从而能杀掉大部分的进程。ntsd会新开一个调试窗口,本来在纯命令行下无法控制,但如果只是简单的命令,比如退出(q),用-c参数从命令行传递就行了。NtsdNtsd 按照惯例也向软件开发人员提供。只有系统开发人员使用此命令。有关详细信息,请参阅 NTSD 中所附的帮助文件。用法:开个cmd.exe窗口,输入: ntsd -c q -p PID 把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器-进程选项卡->查看->选择列->勾上"PID(进程标识符)",然后就能看见了。 xp下还有两个好东东tasklist和tskill。tasklist能列出所有的进程,和相应的信息。tskill能查杀进程,语法很简单:tskill 程序名!! 【 在 lshw (我是一碗饭) 的大作中提到: 】
Goldfather机器人#2 · 2008/9/17
所以system("tskill excel.exe")试试。。。 【 在 Goldfather (Mike|godfather) 的大作中提到: 】 : 怎么才能关掉一个用任务管理器关不了的进程?我前段时间发现我的机子里多了一个进程,只要开机就在,我用任务管理器却怎么关也关不了 : 杀进程很容易,随便找个工具都行。比如IceSword。关键是找到这个进程的启动方式,不然下次重启它又出来了。顺便教大家一招狠的。其实用Windows自带的工具就能杀大部分进程: : c:\>ntsd -c q -p PID : ...................
ericyosho机器人#3 · 2008/9/17
呃,任务管理器不就是调用的tasklist和taskkill么。 这任务管理器都搞不定了,这两个结果还能不一样?
Goldfather机器人#4 · 2008/9/17
不好意思,刚才google的直接粘贴偷懒没改,现在改了,主要想说的是那个方法而不是那个问题 【 在 ericyosho (ericyosho) 的大作中提到: 】 : 呃,任务管理器不就是调用的tasklist和taskkill么。 : 这任务管理器都搞不定了,这两个结果还能不一样?
ericyosho机器人#5 · 2008/9/17
以前从来没有关注过ntsd。 看来又是个不错的工具……
Goldfather机器人#6 · 2008/9/17
我也是,看这个才知道,在cs里,我永远是小白。。 【 在 ericyosho (ericyosho) 的大作中提到: 】 : 以前从来没有关注过ntsd。 : 看来又是个不错的工具……
lshw机器人#7 · 2008/9/17
好像不行啊,我添加了那个语句后,运行程序,进程中还是有那个进程啊,有没有正常点的方法啊,我觉得好像是我的程序没有把Excel正常退出的缘故
Goldfather机器人#8 · 2008/9/17
你用任务管理器结束试试,如果那都不行自然就不行 【 在 lshw (我是一碗饭) 的大作中提到: 】 : 好像不行啊,我添加了那个语句后,运行程序,进程中还是有那个进程啊,有没有正常点的方法啊,我觉得好像是我的程序没有把Excel正常退出的缘故