杀死进程winword

时间:2012-08-29 10:39:17

标签: vb.net multithreading ms-word kill-process

要检查进程是否挂起Word,通过VB.Net 2003项目,我创建一个进程控制的线程(有问题)。如果在进程仍处于活动状态的某个毫秒之后,我将从该线程中终止该进程。系统告诉我“System.ComponentModel.Win32Exception”,“Access Denied”

代码如下:

这是代码Vb:

Imports  System
Imports  System.Threading
Imports  System.Threading.Thread
Imports  System.Security.Permissions
Public Class  ThreadMain
Public  strdotName AsString
Public  strdocName AsString
Public  sXML AsString
Public  idProcesso AsInteger
Public  terminate AsInteger
Public docName AsString
Public  kk AsInteger
Public  finito AsBoolean= False
Public Function LaunchThread() AsInteger
Dim myT2 As Threading.Thread
myT2 = New Threading.Thread(AddressOfMe.DoWork)
myT2.IsBackground = True
myT2.Start()
Try
Console.WriteLine("Finito: {0}", finito)
Catch  Ex As  Exception
End Try
Return terminate
End Function
*-------**
Private Sub DoWork()
Dim  j AsInteger
Dim  errore AsString
Dim  trovato AsBoolean
Dim  colProcess AsProcess
Dim  nomeProcess AsProcess()
Dim  chiusura AsBoolean
Try
For  j = 100 To  20000
colProcess = Process.GetProcessById(idProcesso)
If  Not  colProcess IsNothingThen
j = j + 1000
System.Threading.Thread.Sleep(1)
trovato = True
Else
trovato = False
End If
Next
If  trovato Then
chiusura = colProcess.CloseMainWindow()
colProcess.Close()
Process.GetProcessById(idProcesso).Kill()
terminate = 1
End If
Catch ex As Exception
errore = ex.ToString
terminate = 2
End Try
End Sub 'DoWork

1 个答案:

答案 0 :(得分:1)

“idProcesso”变量未在代码中的任何位置分配。这可能意味着它的价值仍为零。这意味着您正试图杀死“系统”进程。这是一个封装Windows内核组件的虚假进程。像这样杀死Windows是不可能的,无论您的用户权限如何,您都将获得AccessDenied异常。

您需要使用Process.GetProcessesByName()来定位特定流程。

如果这是在使用Microsoft.Office.Interop.Word命名空间时让Word退出的解决方法,那么这只是一种使用未处理的异常终止自己程序的好方法。或者就此而言,用户正在使用另一个Word实例。她不会欣赏失去她的工作。