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

如何从C#windows窗体应用程序执行.bat文件?

  •  11
  • wergeld  · 技术社区  · 16 年前

    我需要做的是让一个C#2005GUI应用程序调用一个.bat,并根据用户的请求提供几个VBScript文件。在假期结束之前,这只是一个权宜之计,我可以用C#来写。我可以让VBScript文件顺利执行,但无法执行.bat文件。当我在C#app中“单击”以执行.bat文件时,DOS窗口会快速打开和关闭,并且test.bat文件不会执行——“Windows不将bat识别为内部或外部命令”是DOS框中返回的错误。如果我只是双击.bat文件或在命令提示符下手动运行它,它就会执行。我还需要.bat文件以静默方式执行,除非需要用户交互-此脚本将11k+个文件复制到联网计算机上的文件夹中,有时Windows会“忘记”目标是文件还是目录,并要求用户告诉它它是什么(这是一个完全不可讨论的问题……不用说,我对此感到恼火)。

    到目前为止,在我的C#source中,我有以下信息:

    Process scriptProc = new Process();
    
    
            if (File.Exists("c:\\scripts\\batchfile1.bat"))
            {
    
                scriptProc.StartInfo.FileName = @"cscript";
                scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
                scriptProc.Start();
                scriptProc.WaitForExit(1500000);
                scriptProc.Close();
    
            }
    
            if (!File.Exists("c:\\scripts\\batchfile1.bat"))
            {
            }
    

    我知道这段代码不起作用,但它本质上就是我想要它做的。对于.bat文件,我看到的是类似这样的内容。我假设我必须告诉系统使用cmd来运行.bat。我不知道该怎么做。我已经查过了 site

    编辑:使用凯文的帖子,我再次尝试。同一篇文章中的解决方案脚本,但对我进行了修改,因为我不需要重定向:

     System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
                proc.StartInfo.RedirectStandardError = false;
                proc.StartInfo.RedirectStandardOutput = false;
                proc.StartInfo.UseShellExecute = false;
                proc.Start();
                proc.WaitForExit();
    
    2 回复  |  直到 15 年前
        1
  •  12
  •   Community pid    7 年前

    以下是您正在寻找的内容:

    Service hangs up at WaitForExit after calling batch file

    这是关于为什么服务不能执行文件的问题,但它显示了执行文件所需的所有代码。

        2
  •  0
  •   Anshul    12 年前

    如果目标是文件: echo f |[批处理文件路径]

    echo d |[批处理文件路径]