【问题标题】:Xcopy does not copy files when run from c#从 c# 运行时 Xcopy 不复制文件
【发布时间】:2016-02-29 15:57:04
【问题描述】:

我从 c# 代码启动 .bat 文件:

     void ExecuteCommand(string command)
     {
        var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
        processInfo.CreateNoWindow = true;
        processInfo.UseShellExecute = false;
        processInfo.RedirectStandardError = true;
        processInfo.RedirectStandardOutput = true;

        var process = Process.Start(processInfo);

        process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
            Console.WriteLine("output>>" + e.Data);
        process.BeginOutputReadLine();

        process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
            Console.WriteLine("error>>" + e.Data);
        process.BeginErrorReadLine();

        process.WaitForExit();

        Console.WriteLine("ExitCode: {0}", process.ExitCode);
        process.Close();
    }

它开始了,一切都被执行了,但是:

set mydir = "C:\mydir"
xcopy /c /y "myFile.exe" %mydir%

文件没有被复制

但是当我从资源管理器运行相同的批处理文件时,该文件会被复制。有什么想法吗?

【问题讨论】:

  • Process.Start 后 %mydir% 值不正确?
  • "C:\mydir 也是个奇怪的targetdir...
  • 两个可能的事情:(a) 你设置targetdir 但使用mydir - 这是对的吗? (b) 是myFile.exe C# exe 的名称,因为如果是,它可能在程序运行时“正在使用”。
  • 这是一个错误,线索是从双击或命令行执行的同一个bat复制文件,但从代码执行,写入回显行,但文件没有被复制。跨度>
  • XCopy.exe 在重定向时非常古怪,如果它的输出被重定向,那么它的输入也必须被重定向。如果不是,那么它无法在没有任何诊断的情况下完成工作。不确定重定向 Cmd.exe 时是否仍然如此。只需尝试一下,也将 processInfo.RedirectStandardInput 设置为 true

标签: c# batch-file


【解决方案1】:

添加 processInfo.RedirectStandardInput = true;为我工作 - 现在文件复制没有问题

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多