709

C#アプリケーション内からコマンドプロンプトコマンドを実行する方法はありますか?もしそうなら、私はどのように次のことをしますか?

copy /b Image1.jpg + Archive.rar Image2.jpg

これは基本的にJPG画像内にRARファイルを埋め込みます。C#でこれを自動的に行う方法があるかどうか疑問に思っていました。

4

17 に答える 17

1061

これは、C#からシェルコマンドを実行するために必要なすべてです

string strCmdText;
strCmdText= "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);

編集:

これは、cmdウィンドウを非表示にするためのものです。

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.StartInfo = startInfo;
process.Start();

編集:2

重要なのは、引数がで始まるということ/Cです。そうでないと、機能しません。スコット・ファーガソンのコメント:「文字列で指定されたコマンドを実行してから終了します。」

于 2009-09-24T04:34:40.990 に答える
160

RameshVel のソリューションを試しましたが、コンソール アプリケーションで引数を渡すことができませんでした。誰かが同じ問題を経験した場合、ここに解決策があります:

using System.Diagnostics;

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine("echo Oscar");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
于 2015-09-30T17:22:43.087 に答える
45
var proc1 = new ProcessStartInfo();
string anyCommand; 
proc1.UseShellExecute = true;

proc1.WorkingDirectory = @"C:\Windows\System32";

proc1.FileName = @"C:\Windows\System32\cmd.exe";
proc1.Verb = "runas";
proc1.Arguments = "/c "+anyCommand;
proc1.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(proc1);
于 2014-04-04T17:52:53.040 に答える
12

技術的には、これは提起された質問に直接答えるものではありませんが、元の投稿者がやりたかったこと、つまりファイルを結合する方法の質問には答えます。どちらかといえば、これは初心者が Instance Hunter と Konstantin が話していることを理解するのに役立つ投稿です。

これは、ファイル (この場合は jpg と zip) を結合するために使用する方法です。zip ファイルのコンテンツで満たされるバッファーを作成し (1 回の大きな読み取り操作ではなく、小さなチャンクで)、バッファーは zip ファイルの最後まで jpg ファイルの末尾に書き込まれることに注意してください。到達:

private void CombineFiles(string jpgFileName, string zipFileName)
{
    using (Stream original = new FileStream(jpgFileName, FileMode.Append))
    {
        using (Stream extra = new FileStream(zipFileName, FileMode.Open, FileAccess.Read))
        {
            var buffer = new byte[32 * 1024];

            int blockSize;
            while ((blockSize = extra.Read(buffer, 0, buffer.Length)) > 0)
            {
                original.Write(buffer, 0, blockSize);
            }
        }
    }
}
于 2014-03-04T09:37:41.283 に答える
8

はい、あります(Matt Hamiltonのコメントのリンクを参照)が、.NETのIOクラスを使用する方が簡単で優れています。File.ReadAllBytesを使用してファイルを読み取り、次にFile.WriteAllBytesを使用して「埋め込み」バージョンを書き込むことができます。

于 2009-09-24T04:30:48.890 に答える
8

を参照してMicrosoft.VisualBasic

Interaction.Shell("copy /b Image1.jpg + Archive.rar Image2.jpg", AppWinStyle.Hide);
于 2016-08-25T01:26:32.067 に答える