我在命令行中使用ImageMagick convert.exe(重新调整图像大小)。它很棒。但是如果我在C#中做同样的事情那么它就行不通了。它没有显示任何错误,所有行都运行得很好。 StanderdErrorOutput
也是空的。任何的想法?这是我的代码。
var myProcess = new Process();
myProcess.StartInfo.FileName = @"C:\Users\user\Desktop\ImageMagick-6.8.6-Q16\convert.exe";
myProcess.StartInfo.Arguments = @"icon.png -resize 64x64 icon1.png";
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
myProcess.WaitForExit();
Console.Read();
答案 0 :(得分:0)
这是我用来运行进程的东西,除了调用StandardError.ReadToEnd()的行之外,它基本上与你的进程相同。
// create process start info
ProcessStartInfo startInfo = new ProcessStartInfo(fileName, arguments);
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
// run the process
using (Process proc = System.Diagnostics.Process.Start(startInfo))
{
// This needs to be before WaitForExit() to prevent deadlocks, for details:
// http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput%28v=VS.80%29.aspx
proc.StandardError.ReadToEnd();
// Wait for exit
proc.WaitForExit();
}
答案 1 :(得分:0)
我通过创建临时批处理文件
找到了解决方案 static void Main(string[] args)
{
var guid = Guid.NewGuid().ToString();
var root = AppDomain.CurrentDomain.BaseDirectory;
var batchFilePath = root + guid + ".bat";
var cmd = @"cd C:\Users\user\Desktop\ImageMagick-6.8.6-Q16" + Environment.NewLine
+ "convert icon.png -resize 64x64 icon1.png";
CreateBatchFile(cmd, batchFilePath);// Temporary Batch file
RunBatchFile(batchFilePath);
DeleteBatchFile(batchFilePath);
}
private static void RunBatchFile(string batFilePath)
{
var myProcess = new Process();
myProcess.StartInfo.FileName = batFilePath;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
myProcess.WaitForExit();
}
private static void DeleteBatchFile(string file)
{
File.Delete(file);
}
private static void CreateBatchFile(string input, string filePath)
{
FileStream fs = new FileStream(filePath, FileMode.Create);
StreamWriter writer = new StreamWriter(fs);
writer.WriteLine(input);
writer.Close();
fs.Close();
}
答案 2 :(得分:0)
我在尝试运行Convert时在Mac上遇到了类似的问题,即使是其他海报建议的ReadToEnd()也是如此。
我通过添加
找到了-debug'All'
选项导致它工作。
我没有想法为什么!