我在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();
}
}
}
答案 0 :(得分:1)
Dts.TaskResult = (int)ScriptResults.Success;
此行表示无论进程返回什么,您都将在进程退出时始终返回true。相反,您可能希望捕获进程的退出代码(更好,在调试时记录其常规输出)并使用它来评估脚本是否成功。
更进一步,是否有理由使用command.exe而不是执行批处理或vb脚本?这样可以让您更好地控制输出。
编辑:至于为什么您的程序没有按预期执行,您是否尝试在输入后手动刷新流?