运行命令提示符命令
有没有办法在C#应用程序中运行命令提示符命令? 如果是这样,我将如何做到以下几点:
copy /b Image1.jpg + Archive.rar Image2.jpg
这基本上是在JPG图像中embedded一个RAR文件。 我只是想知道是否有办法在C#中自动执行此操作。 谢谢。
这是所有你必须做的从C#运行shell命令
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();
尝试@RameshVel解决scheme,但我不能在我的控制台应用程序中传递参数。 如果有人遇到同样的问题,这是一个解决scheme:
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());
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);
是的,有(见Matt Hamilton评论的链接),但使用.NET的IO类会更容易,更好。 您可以使用File.ReadAllBytes来读取文件,然后使用File.WriteAllBytes来编写“embedded”版本。
虽然在技术上这并不直接回答提出的问题,但它确实回答了如何做原始的海报想做的问题:结合文件。 如果有的话,这是一个帮助新手了解什么样的猎人和康斯坦丁正在谈论的职位。
这是我用来合并文件(在这种情况下,一个JPG和一个zip)的方法。 请注意,我创build了一个缓冲区,用zip文件的内容(小块而不是一个大的读取操作)填充,然后缓冲区被写入到jpg文件的后面,直到zip文件的结尾是到达:
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); } } } }
这是简单的less代码版本。 它也会隐藏控制台窗口 –
System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg"; process.Start();
参考Microsoft.VisualBasic
Interaction.Shell("copy /b Image1.jpg + Archive.rar Image2.jpg", AppWinStyle.Hide);
上述答案没有一个是因为某种原因而起作用的,似乎他们在地毯下扫描错误并且难以排除命令。 所以我结束了这样的事情,也许会帮助别人:
var proc = new Process { StartInfo = new ProcessStartInfo { FileName = @"C:\Program Files\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe", Arguments = "checkout AndroidManifest.xml", UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true, WorkingDirectory = @"C:\MyAndroidApp\" } }; proc.Start();
你可以在一行中使用CliWrap :
var stdout = new Cli("cmd") .Execute("copy /b Image1.jpg + Archive.rar Image2.jpg") .StandardOutput;