Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从SSIS调用cmd.exe并在命令行上执行命令_C#_Ssis_Cmd - Fatal编程技术网

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

C# 如何从SSIS调用cmd.exe并在命令行上执行命令,c#,ssis,cmd,C#,Ssis,Cmd,我正在使用SQL Server Integration Services(SSIS 2008)中的脚本任务在Windows命令行上运行命令。该命令仅对具有已知文件名的文件进行解密 当我执行任务时,“脚本任务”框变为绿色,并报告它已成功运行,但在检查文件时,我发现根本没有发生任何事情。下面是我的代码。知道我做错了什么吗?先谢谢你 更新:我的目标是从C#SSIS脚本中解密一个文件,并了解下面的代码为什么不能做到这一点。我并不关心任务框是否变绿或报告成功 using System; using Sys

我正在使用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();

    }
}
}

这一行意味着您将在进程退出时始终返回true,而不管进程返回什么。相反,您可能希望捕获进程的退出代码(更好的是,在调试时记录其常规输出),并使用它来评估脚本是否成功

更进一步,您使用command.exe而不是执行批处理或vb脚本是否有原因?这将使您能够更好地控制输出


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

根据@SomeGuy的指示,您从不检查
过程中的返回代码
或查看标准输出和标准错误流。将前者弹出到OnInformation中,将后者弹出到OnError事件中,然后事情就会开始发生。有没有理由不只是使用
execute process task
执行此任务?ElectricLlama-我无法让execute process task工作。我调用了cmd.exe并输入了参数,但所发生的只是打开了一个命令窗口,参数没有运行。我想我可以尝试编写创建批处理文件的脚本(因为我需要一个动态日期),然后尝试将批处理作为任务运行。这个问题对我来说已经解决了,但是如果这个关于代码的问题得到了回答,那就太好了。我的问题通过编写和执行创建批处理文件的脚本得到解决。然后执行流程任务运行批处理文件。然而,本页的主要问题是,如何从C#code调用CMD.EXE并运行命令?我仍然希望确切地知道上面的代码中缺少了什么,这会导致命令及其参数/开关实际运行,并实际操作预期的文件。您需要使用/C作为“参数”的第一个参数输入并指定cmd.exe作为可执行文件。我已经从示例中删除了这行代码,因为它与我的实际问题无关。我意识到这是每个SSIS脚本任务中的标准代码。我更关心的是,为什么我的代码没有在Windows命令行中执行解密命令。在我们开始探究为什么它不起作用之前,为什么要采用这种方法?简单地调用批处理文件似乎比通过先调用CMD,然后使用它调用批处理文件来增加复杂性(和开销!)更容易!我并不认为它很复杂,也不认为它的开销太大。为了解密我的文件,我必须使用一个脚本任务,该任务通过代码创建批处理文件。然后我必须使用执行进程任务来运行该批处理文件。当然,这很简单,但有两个步骤。我不认为只使用一个脚本任务步骤有什么错,特别是如果它不是一大堆代码的话?由于SSIS 2008中没有内置的解密任务,我认为使用少量代码来完成这一步骤是完全合理的。最后,我只想学习如何从代码中完成cli TAK。做一个更好的程序员!无论如何,通过查看代码,如果您记得刷新您的流,事情似乎是可行的。谢谢。我在每次输入后都尝试了这个方法,但文件没有解密,也没有抛出错误:;
Dts.TaskResult = (int)ScriptResults.Success;