如果在数据流任务失败时如何终止SSIS中的excel.exe进程?可能有多个Excel.exe实例从其他包中运行,这些实例完全有效,所以我不想遍历所有杀死它们的实例。
我的问题是,在数据流任务期间,由于名称不正确或缺少列的工作表,该过程有时会失败。这使得运行excel.exe的实例成为现在的孤儿任务占用资源,因此需要将其杀死。
同时运行其他SSIS包正在访问自己的excel.exe进程并且没有任何问题。
那么如何在不影响其他excel.exe进程的情况下杀死孤立的excel.exe进程呢?
由于
答案 0 :(得分:0)
您可以使用以下脚本停止Windows服务
Public Sub Main()
Dim controller As New ServiceController
controller.MachineName = "."
controller.ServiceName = "ReportServer"
Dim status As String = controller.Status.ToString
If status.ToLower = "running" Then
controller.Stop()
End If
Dts.TaskResult = Dts.Results.Success
End Sub
ServiceController类上有Finalize方法。也许它可以杀死一个过程。
答案 1 :(得分:0)
在这种情况下,您需要从sysprocesses获取主机的processID并运行taskkill以摆脱该过程。在TSQL中有类似的东西:
DECLARE @cmd VARCHAR(50)
SELECT @cmd = 'taskkill /pid ' +
CAST(hostprocess AS VARCHAR(10))
FROM sys.sysprocesses
WHERE program_name = 'Microsoft® Excel'
AND status = 'sleeping'
xp_CmdShell (@cmd);
如果您可以在生成时立即获得Excel流程的SPID,那就更好了,然后您可以将其存储并插入上面的命令中。阅读taskkill函数,因为它有一些其他可能有用的选项。