0

サーバーにデプロイされた SSIS パッケージを実行するために、別のユーザーとして DTExec を実行するアプリケーションを作成しています。現在、特定のコンポーネントが有効かどうかに基づいて引数文字列を生成しています。

これが私の問題です... DTExecを実行するとき、私は次のコードを使用します:

        System.Security.SecureString password = PasswordBox.SecurePassword;
        string DTExecArgs = rules.GetDTExecArgsHarden(); // generate the arguments


        //redirect standard output stream of the child process
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\DTExec.exe";
        p.StartInfo.Arguments = DTExecArgs;
        p.StartInfo.UserName = "hello123";
        p.StartInfo.Domain = "mydomain";    
        p.StartInfo.Password = password;
        p.Start();

このコードを実行すると、「スタブが不正なデータを受信しました」というエラーが表示され、プログラムがクラッシュします。デバッグ モードに入ると、コマンドとして受け取った文字列をコピーし、ユーザー hello123 としてコマンド プロンプトを実行し、dtexec [ここにコマンドを貼り付け] と入力すると、まったく問題なく実行されます。これは、コマンドが適切であると私に信じさせます。以下は、コマンド変数の内容です。

/ISServer "\SSISDB\ServerUpdating\UpdateRun\Server Update Run.dtsx"  /SERVER "(LocalDB)\v11.0" /Envreference 3
/Par "ServerID(Int16)";-1 
/Par "TargetServerConnectionString(String)";"\"Data Source=local(v11.0);Initial Catalog=master;Provider=SQLNCLI11.1;Auto Translate=False;Integrated Security=SSPI"\"
/Par "Disable1_1(Boolean)";False 
/Par "Disable1_2(Boolean)";False 
/Par "Disable2_1(Boolean)";False 
/Par "Disable2_2(Boolean)";False 
/Par "Disable2_3(Boolean)";False 
/Par "Disable2_4(Boolean)";False 
/Par "Disable2_5(Boolean)";False 
/Par "Disable2_6(Boolean)";False 
/Par "Disable2_7(Boolean)";False 
/Par "Disable2_8(Boolean)";False 
/Par "Disable2_9(Boolean)";False 
/Par "Disable2_10(Boolean)";False
/Par "Disable2_11(Boolean)";False
/Par "Disable2_12(Boolean)";False
/Par "Disable2_13(Boolean)";False
/Par "Disable2_14(Boolean)";False
/Par "Disable2_15(Boolean)";False
/Par "Disable3_1(Boolean)";False 
/Par "Disable3_2(Boolean)";False 
/Par "Disable3_3(Boolean)";False 
/Par "Disable4_1(Boolean)";False 
/Par "Disable4_2(Boolean)";False 
/Par "Disable4_3(Boolean)";False 
/Par "Disable5_1(Boolean)";False 
/Par "Disable5_2(Boolean)";False 
/Par "Disable5_3(Boolean)";False 
/Par "Disable6_1(Boolean)";False 
/Par "Disable6_2(Boolean)";False  

コマンド自体には改行がないことに注意してください。読みやすくするために改行を追加しました。しかし、その EXACT コマンドを (デバッグから直接) dtexec [ここにコマンドを挿入] にコピーして貼り付けると、プロジェクトが実行されます。

何か案は?

4

0 に答える 0