0

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

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

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

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

谢谢

4

2 回答 2

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

于 2012-05-10T18:01:33.690 回答
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 方法。也许它可以杀死一个进程。

于 2012-05-10T14:25:09.393 回答