SSIS - 在数据流任务失败时终止Excel.exe

时间:2012-05-10 12:58:25

标签: sql-server vb.net excel ssis

如果在数据流任务失败时如何终止SSIS中的excel.exe进程?可能有多个Excel.exe实例从其他包中运行,这些实例完全有效,所以我不想遍历所有杀死它们的实例。

我的问题是,在数据流任务期间,由于名称不正确或缺少列的工作表,该过程有时会失败。这使得运行excel.exe的实例成为现在的孤儿任务占用资源,因此需要将其杀死。

同时运行其他SSIS包正在访问自己的excel.exe进程并且​​没有任何问题。

那么如何在不影响其他excel.exe进程的情况下杀死孤立的excel.exe进程呢?

由于

2 个答案:

答案 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函数,因为它有一些其他可能有用的选项。