Я использую собственное приложение Windows spamc.exe (SpamAssassin - sawin32) из командной строки следующим образом:
C: \ SpamAssassin \ spamc.exe -R
Теперь я бы хотел вызвать этот процесс из C #:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"C:\SpamAssassin\spamc.exe";
p.StartInfo.Arguments = @"-R";
p.Start();
p.StandardInput.Write(@"C:\email.eml");
p.StandardInput.Close();
Console.Write(p.StandardOutput.ReadToEnd());
p.WaitForExit();
p.Close();
Приведенный выше код просто передает имя файла в виде строки в spamc.exe (, а не содержимое файла ). Тем не менее, этот работает:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"C:\SpamAssassin\spamc.exe";
p.StartInfo.Arguments = @"-R";
p.Start();
StreamReader sr = new StreamReader(@"C:\email.eml");
string msg = sr.ReadToEnd();
sr.Close();
p.StandardInput.Write(msg);
p.StandardInput.Close();
Console.Write(p.StandardOutput.ReadToEnd());
p.WaitForExit();
p.Close();
Может ли кто-нибудь указать мне, почему это работает, если я читаю файл и передаю содержимое в spamc, но не работает, если я просто передаю имя файла, как в командной строке Windows?