複数の引数を使用して DOS コマンドを実行するために ProcessStartInfo に複数の引数を渡す方法を説明するいくつかのソリューションが投稿されています。この特定のケースでは、それらのどれも機能しません。
ac# アプリケーション内から ncftpget を実行しようとしています - 正確な文字列リテラル (@"arg1 arg2 arg3") を使用して複数の引数を実行可能ファイルに渡します。
何が起こっているかというと、引数リストが十分に長いため、切り捨てられますが、(最後に) 期待する場所ではありません。
だから私は次のようなものを渡します:
Program = "ncftpget"
Arguments = @"-f host.cfg D:\ServerBackups\Windows6 2012_01_28_SQLBackupFile.bak"
そして ncftp が取得するのは
-f host.cfg D:\ServerBackups\Windows6 ackupfile.bak
ncftpget を直接呼び出す代わりに、bat ファイルを作成して実行すると、動作します。
奇妙なことに、XP_CMDShell を使用した T/SQL から、これよりもはるかに長い引数を指定して ncftpget を呼び出しています。「パラメータは非常に長くなる可能性があるため、最後ではなく最初から切り捨てる」という環境変数があるかのようです。
引数を引用してみましたが、違いはなく、同じ動作です。
もちろん、Microsoft が実際にまともな ftp ソリューションを持っていた場合...それは正しいモードを使用していました...しかし、それは彼らが決して修正しない古い不満です。