C#中怎样杀掉指定的进程

caolilong11 2010-03-24 09:38:55
如果不是应用程序打开的进程不能杀掉。那位能帮忙解决??
...全文
1898 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
aboutibm 2012-05-30
  • 打赏
  • 举报
回复
process.MainWindowTitle是打开的doc文件名
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
楼上的,我有管理员的权限,我是以管理员身份登录的。
mjay0210 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuyq11 的回复:]
private void KillProcess(string processName)
{
System.Diagnostics.Process myproc= new System.Diagnostics.Process();
foreach (Process thisproc in Process.GetProcessesByName(processName)) {
if(!this……
[/Quote]
你要有管理员权限才可以哦
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
有按错键盘了,具体如下,通过单击按钮打开word
private void button1_Click(object sender, System.EventArgs e)
{
axWebBrowser1.Navigate(url, ref refmissing, ref refmissing, ref refmissing, ref refmissing);
}
public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
{

Object o = e.pDisp;
oDocument = o.GetType().InvokeMember("Document", BindingFlags.GetProperty, null, o, null);
DateTime date = DateTime.Now;Object oApplication = o.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, oDocument, null);
Object oName = o.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, oApplication, null);
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
刚刚按错键了,还没写完就发送了,还有如下代码
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
是的我明白楼上的意思。我之前使用processname杀进程,就是因为这样不行,所以在这里请教各位。
楼上的要我把代码贴出来,因代码太多,只贴些关键的代码,如下
private void button1_Click(object sender, System.EventArgs e)
{
axWebBrowser1.Navigate(url, ref refmissing, ref refmissing, ref refmissing, ref refmissing);
鸭梨山大帝 2010-03-25
  • 打赏
  • 举报
回复
如果不行,贴代码出来.
(其实在窗体中Dispose/Exit应该是可以自我释放创建的子进程的)
楼主贴代码出来看看
鸭梨山大帝 2010-03-25
  • 打赏
  • 举报
回复
lz,我帖子的意思是你不要按Process.ProcessName去杀进程.
你看一下Process类,其中有很多地方标记了该Process的信息的.
比如
Process.MainModule中的多项属性
Process.MainWindowTitle

根据这些信息肯定可以定位到你在进程内创建到窗体上的Word

[Quote=引用 13 楼 caolilong11 的回复:]
是的,楼上说的方法我做过,你说在程式中New WordApplication会生成一个新进程,而且关掉它时根本不会
影响其他的winword.exe,是这样的。
但是我要做的是word在窗体里面打开(因为客户是这样要求的),我使用的是组件显示word ,而New WordApplication 会在新的word界面打开word,而不是在窗体上打开,所以这样还是不行。
[/Quote]
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
引用楼上的代码
if ("stock" == myProcess.ProcessName)
myProcess.Kill();

}
就像Lost_Painting说的,根据进程名杀掉进程,所有同名的进程都会杀掉。我之前也是用的这种方法,

我只想杀掉winform窗体内打开的winword.exe,不要把其他的winword.exe杀掉。所以问题还是没解决,

不过还是要谢谢楼上的。
liuchangsheng 2010-03-25
  • 打赏
  • 举报
回复
private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("确定退出吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{

// notifyIcon1.Visible = false;
System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcesses();

foreach (System.Diagnostics.Process myProcess in myProcesses)
{
if ("stock" == myProcess.ProcessName)
myProcess.Kill();

}

}
else
{
MainFrm app = new MainFrm();
app.Show();
}
}
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
是的,楼上说的方法我做过,你说在程式中New WordApplication会生成一个新进程,而且关掉它时根本不会
影响其他的winword.exe,是这样的。
但是我要做的是word在窗体里面打开(因为客户是这样要求的),我使用的是组件显示word ,而New WordApplication 会在新的word界面打开word,而不是在窗体上打开,所以这样还是不行。
鸭梨山大帝 2010-03-25
  • 打赏
  • 举报
回复
应该不会的.

我这里直接在程式中New WordApplication 是会生成一个新的进程的.杀掉这个进程不会影响其他Word进程

楼主肯定是根据Word.exe这个进程文件名去杀的,那肯定全杀光了.

caolilong11 2010-03-25
  • 打赏
  • 举报
回复
如果直接kill的话所有的winword.exe将会被结束掉。

可能大家还没明白我的问题,比如我在桌面打开一个word文档,然后我通过winform窗体打开一个word文档,

当我要杀掉winform窗体打开的word进程时,桌面打开的word文档也会关闭,问题是我并不要它关闭,
希望大家给出好的建议和方法!
段传涛 2010-03-25
  • 打赏
  • 举报
回复
不是释放。
直接kill 就行了。
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
我试了wuyq11给的方法,应用程序内打开的文档的进程是杀掉了,但问题还是存在,当执行到
if (!thisproc.CloseMainWindow())这段代码时,

在应用程序外打开的文档还是被关闭了,
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
感谢各位的建议!谢了!
caolilong11 2010-03-25
  • 打赏
  • 举报
回复
终于自己解决了!不过谢谢Lost_Painting的提示,利用到了process.MainWindowTitle属性,
如果在winform里面打开的word这个属性值是个空字符串。谢谢各位,结贴给分了。
caolilong11 2010-03-24
  • 打赏
  • 举报
回复
我可能没说的很具体,我用的是windows应用程序,比如说我在winform里面打开word,我想关闭的word,
于是就只能结束的winword.exe,我用的是process.kill()方法,发现程序外打开的word文档也会被关闭。
楼上说的使这种方法吗?
System.Windows.Forms.Application.Exit();
Form1 form = new Form1();
form.Dispose();
我试了好像不行,我想做的是在不关闭窗体时,结束掉winword.exe
nosuchtracter 2010-03-24
  • 打赏
  • 举报
回复
先释放资源
再dispose
wuyq11 2010-03-24
  • 打赏
  • 举报
回复
private void KillProcess(string processName)
{
System.Diagnostics.Process myproc= new System.Diagnostics.Process();
foreach (Process thisproc in Process.GetProcessesByName(processName)) {
if(!thisproc.CloseMainWindow()){
thisproc.Kill();
GC.Collect();
}
Process[] prcs = Process.GetProcesses();
foreach (Process p in prcs) {
if (p.ProcessName.Equals("程序名")) {
p.Kill();
}
}
加载更多回复(4)

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧