如何从SSIS调用cmd.exe并在命令行上执行命令

时间:2014-02-03 23:54:02

标签: c# ssis cmd

我在SQL Server Integration Services(SSIS 2008)中使用脚本任务在Windows命令行上运行命令。该命令只是解密具有已知文件名的文件。

当我执行任务时,脚本任务框变为绿色并报告它已成功运行,但在检查文件时,我发现根本没有发生任何事情。以下是我的代码。知道我在这里做错了吗?提前谢谢。

更新:我的目标是从C#SSIS脚本解密文件,并了解下面的代码为什么不这样做。我不关心任务框是否变绿或报告成功。

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Diagnostics;


    public void Main()
    {
        string DecryptCommand;

        var startInfo = new ProcessStartInfo
        {
            FileName = "cmd.exe",
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };

        DecryptCommand = "echo my_passphrase|gpg --batch --passphrase-fd 0 --decrypt-files      my_file_" + DateTime.Now.ToString("MMddyyyy") + ".pgp"; 
        var process = new Process { StartInfo = startInfo };

        process.Start();
        process.StandardInput.WriteLine("cd D:\\Foo\\Bar\\EncryptedFiles");
        process.StandardInput.WriteLine(DecryptCommand);
        process.StandardInput.WriteLine("exit");
        process.WaitForExit();

    }
}

}

1 个答案:

答案 0 :(得分:1)

Dts.TaskResult = (int)ScriptResults.Success;

此行表示无论进程返回什么,您都将在进程退出时始终返回true。相反,您可能希望捕获进程的退出代码(更好,在调试时记录其常规输出)并使用它来评估脚本是否成功。

更进一步,是否有理由使用command.exe而不是执行批处理或vb脚本?这样可以让您更好地控制输出。

编辑:至于为什么您的程序没有按预期执行,您是否尝试在输入后手动刷新流?