【问题标题】:Robocopy Success/Failure reported via Window's application通过 Window 的应用程序报告 Robocopy 成功/失败
【发布时间】:2014-03-10 16:18:40
【问题描述】:

提前感谢您的宝贵时间。

我正在开发一个应用程序来自动化我每天必须检查的一些事情。

其中之一是确保我们所有的每日 Robocopies 都成功进行。

我在找出将其传达给我的程序的最佳方式时遇到了问题。我已经查看了 Robocopy 使用的各种退出代码,这些代码非常有用,但是无论如何都可以将其输出到文件中,并且无论如何都知道它与哪个备份相关联?

抱歉,如果这含糊不清,请让我知道任何其他可能有用的信息。

谢谢, 会

【问题讨论】:

    标签: c# exit-code robocopy


    【解决方案1】:

    如果您从应用程序启动 robocopy 进程,您可以从那里检查退出代码。

    Process myProcess = null;
    
    // Start the process.
    myProcess = Process.Start("robocopy ....");
    
    myProcess.WaitForExit(1000);
    
    Console.WriteLine("Process exit code: {0}",  myProcess.ExitCode);
    

    http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exitcode(v=vs.110).aspx

    【讨论】:

    • 副本实际上是在单独的服务器上完成的,我想我在通过这个应用程序远程运行进程时会遇到问题。
    • 如果您的应用程序以具有该服务器权限的域用户身份运行,您应该仍然可以这样做。
    • 啊,太好了。我明天回去工作时会研究这个!谢谢。
    【解决方案2】:

    您可以将 Robocopy 输出写入文件并读入,例如

    robocopy c:\Test\ c:\temp /LOG+:myLogFile
    

    然后尝试使用日志选项以获得有用的详细信息(请参阅http://ss64.com/nt/robocopy.html

    【讨论】:

    • 您好,感谢您的回复。为了澄清一下,我们目前将所有日志输出到文件中。从这些文件中读取的问题在于它以一种不容易解析和获取所需信息的方式输出错误。可能有一些日志记录选项可以缓解这个问题,所以我会研究一下。再次感谢。
    • 可能是/NP /NS /NC /NDL /NJH /NJS /FP
    【解决方案3】:

    你可以这样做:

    public static void Main()
    {
        // Prepare the process.
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "robocopy.exe";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments = "WHATEVER YOU NEED"
    
        // Start process and wait for it to end
        Process exeProcess = Process.Start(startInfo)
        exeProcess.WaitForExit();
    
        // Display what the exit code was
        Console.WriteLine();
        Console.WriteLine("Process exit code: {0}", exeProcess.ExitCode);
    }
    

    【讨论】:

      【解决方案4】:

      像这样创建一个 Robocopy 流程:

      string command = $"Robocopy {sourcePath} {targetPath} /MIR /w:1 /r:10";
      var copyTask = new Process()
      {
          StartInfo = new ProcessStartInfo()
          {
              FileName = "CMD.exe"
              Arguments = $"/c {command}", 
              UseShellExecute = false,
              RedirectStandardOutput = true, 
              CreateNoWindow = true
          }
      };
      

      像这样使用它:

      copyTask.Start()
      string Output = copyTask.StandardOutput.ReadToEnd();
      copyTask.WaitForExit();
      

      现在您在“string output”中拥有了整个日志。如果您想找出问题所在,这很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-13
        • 2016-08-24
        • 1970-01-01
        • 2020-02-13
        • 2016-07-12
        • 1970-01-01
        • 1970-01-01
        • 2019-09-20
        相关资源
        最近更新 更多