要检查进程是否挂起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
答案 0 :(得分:1)
“idProcesso”变量未在代码中的任何位置分配。这可能意味着它的价值仍为零。这意味着您正试图杀死“系统”进程。这是一个封装Windows内核组件的虚假进程。像这样杀死Windows是不可能的,无论您的用户权限如何,您都将获得AccessDenied异常。
您需要使用Process.GetProcessesByName()来定位特定流程。
如果这是在使用Microsoft.Office.Interop.Word命名空间时让Word退出的解决方法,那么这只是一种使用未处理的异常终止自己程序的好方法。或者就此而言,用户正在使用另一个Word实例。她不会欣赏失去她的工作。