代码之家  ›  专栏  ›  技术社区  ›  jdecuyper

从C控制台启动时无法从spamassassin读取返回值

  •  0
  • jdecuyper  · 技术社区  · 14 年前

    我有一个安装了邮件服务器的WindowsServer2008。对于收到的每一封电子邮件,都会启动一个C#应用程序,通过一组可选的过滤器将邮件传送出去,然后决定是否让邮件通过。

    SAWin32 ). 当我直接从命令行启动SpammAssassin时,电子邮件得到了正确的分析:

    spamassassin.exe  -L -e < C:\SPAM.MAI
    

    (-L仅启用本地测试,-e如果测试的邮件是垃圾邮件,则以非零值退出)

    但是当我尝试从我的C应用程序启动它时,它似乎不起作用,因为返回值总是等于2(即使对于ham消息也是如此):

    Process proc = new Process();
    proc.StartInfo.FileName = @"C:\spamassassin.exe";
    proc.StartInfo.Arguments = " -L -e < C:\SPAM.MAI";
    proc.StartInfo.CreateNoWindow = false;
    proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    proc.Start();
    proc.WaitForExit();
    int exitCode = proc.ExitCode;
    Console.WriteLine("Exit code: " + exitCode);
    proc.Close();
    

    谢谢!

    1 回复  |  直到 14 年前
        1
  •  0
  •   jdecuyper    14 年前

            Process p = new Process();
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;
    
            p.StartInfo.Arguments = @" /C C:\spamassassin.exe -e -L < C:\SPAM_TEST.MAI";
            p.StartInfo.FileName = @"C:\WINDOWS\System32\cmd.exe";
            p.OutputDataReceived += (sender, arguments) => Console.WriteLine("Received output: {0}", arguments.Data);
            p.Start();
            p.BeginOutputReadLine();
            p.WaitForExit();
            Console.WriteLine("Exit code: " + p.ExitCode);
            p.Close();
    

    /C参数告诉CMD执行命令,然后终止。

    希望这能帮上忙!

    推荐文章