打开word后如何知道该word进程的PID?

wangqian84 2011-01-19 03:20:15
请问:c#打开word后如何知道该word进程的PID?

---------------------------------
打开word的操作是抛到线程实现的,
也就是同一时间可能有几个word.exe进程存在,因此只能用进程pid去杀。
...全文
624 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangqian84 2011-01-20
  • 打赏
  • 举报
回复
解决

用 线程同步 方法做

杀进程的话得需要权限,之前是权限不够。。。呵呵
l576981437 2011-01-19
  • 打赏
  • 举报
回复
遍历所有进程 然后一个一个对比
xingyuebuyu 2011-01-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/deepnight/archive/2010/01/27/Query_Parent_Process.html


Process.GetProcessesByName(processName)
获取所有word进程,然后判断这些进程的父进程ID是不是你自已的程序,不是不需要kill
only_fly_x 2011-01-19
  • 打赏
  • 举报
回复
你可以先检测有word进程运行没有,有的话,在原进程下运行新文档怎么样?
那样只要关一个word进程了。
wuyq11 2011-01-19
  • 打赏
  • 举报
回复
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.Runtime.InteropServices.Marshal.ReleaseComObject(Doc);
app=null;
Doc=null;
GC.Collect();
GC.Collect();
System.Diagnostics.Process myproc= new System.Diagnostics.Process();
foreach (Process thisproc in Process.GetProcessesByName(processName)) {
if(!thisproc.CloseMainWindow()){
thisproc.Kill();
}}
wangqian84 2011-01-19
  • 打赏
  • 举报
回复
我自己测试时 如果不单开word 运行程序 可以自动销毁

如果打开一个word 然后再运行此程序时,
计算机会响一声 然后那个进程也不会关闭,就是有两个word.exe进程。
如果再运行一次此程序会有三个word.exe进程 。。。。。
wangqian84 2011-01-19
  • 打赏
  • 举报
回复
没这么简单啊,
我是通过api操作word时引发的进程里word.exe未背销毁

就是在word打开的瞬间如何取到进程pid


部分代码如下:
Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document doc = null;
...
....
// 打开doc文件
doc = newApp.Documents.Open(ref Source, ref Unknown, ref readOnly,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);

// 转换格式
doc.SaveAs(ref Target, ref format,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);

..
..

finally
{
if (doc != null)
{
// 关闭文档和Word程序
doc.Close(ref Unknown, ref Unknown, ref Unknown);
}
newApp.Quit(ref Unknown, ref Unknown, ref Unknown);

//逐步关闭所有
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(newApp);
}
widiandian 2011-01-19
  • 打赏
  • 举报
回复
楼上正解~~
cfans1314 2011-01-19
  • 打赏
  • 举报
回复
试试这样行不?
通过 Process newp = Process.Start (openFileDialog1.FileName );开启word后
string [] processInfo={
newp.newp.ProcessName , //进程名字
newp.Id.ToString() //进程号
};
在结束word的方法中这样写:
//获取计算机中的进程
Process[] processes;
processes = System.Diagnostics.Process.GetProcesses();

for (int i = 0; i < processes.Length; i++)
{

Process process = processes[i];
string processname = process.ProcessName.ToString();
if(processname="word.exe")
{
processes[i].kill();
}
}




110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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