VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 批处理教程 >
  • (C#) 调用执行批处理文件

Task:  在Windows的Service里面定时的调用执行一个批处理文件。

复制代码
       private ApplicationOutput RunCommandOnPC(string executablePath, string args, string workingFolder, bool ignoreErrorCode)
        {
            if (!Path.IsPathRooted(executablePath))
            {
                string executingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                executablePath = Path.Combine(executingDirectory, executablePath);
            }
// 显示Dos窗口,观察执行情况。 
            //using (Process process = new Process())
            //{
            //    process.StartInfo = new ProcessStartInfo(executablePath, args);
            //    process.StartInfo.UseShellExecute = true;

            //    process.Start();
            //    process.WaitForExit();
            //}
            //return null; 

            using (Process process = new Process())
            {
                process.StartInfo = new ProcessStartInfo(executablePath, args);
                if (workingFolder != null)
                {
                    process.StartInfo.WorkingDirectory = workingFolder;
                }

                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError = true;
                StringBuilder stdOutput = new StringBuilder();
                StringBuilder stdError = new StringBuilder();

                using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false))
                using (AutoResetEvent errorWaitHandle = new AutoResetEvent(false))
                {
                    process.OutputDataReceived += (sender, e) =>
                        {
                            if (e.Data != null)
                            {
                                stdOutput.AppendLine(e.Data);
                            }
                            else
                            {
                                outputWaitHandle.Set();
                            }
                        };

                    process.ErrorDataReceived += (sender, e) =>
                        {
                            if (e.Data != null)
                            {
                                stdError.AppendLine(e.Data);
                            }
                            else
                            {
                                errorWaitHandle.Set();
                            }
                        };

                    string processOutput = string.Empty;
                    process.Start();
                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();

                    if (process.WaitForExit((int)this.defaultTimeout.TotalMilliseconds)
                        && outputWaitHandle.WaitOne((int)this.defaultTimeout.TotalMilliseconds)
                        && errorWaitHandle.WaitOne((int)this.defaultTimeout.TotalMilliseconds))
                    {
                        // Process is completed. 
                        processOutput = stdOutput.ToString() + stdError.ToString();
                        if (!ignoreErrorCode && process.ExitCode != 0)
                        {
                            throw new Exception(string.Format("{0} {1}, ExitCode {2}, Args {3}.", executablePath, args, process.ExitCode, processOutput));
                        }
                    }
                    else
                    {
                        throw new Exception(string.Format("Process running is time out in {0}.", (int)this.defaultTimeout.TotalMilliseconds));
                    }

                    return new ApplicationOutput
                    {
                        ReturnValue = (uint)process.ExitCode,
                        Output = processOutput
                    };

                }
            }    
复制代码

 调用程序的时候,需要用 cmd.exe /c

 string dosCommand = @"c:\windows\system32\cmd.exe";
            string batchFileName = @"test.bat"; 
            string workingFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            string args = string.Format(@"/C {0}\{1} /Y", workingFolder, batchFileName); 

            var output = this.RunCommandOnPC(dosCommand, args, workingFolder, false);

 出处:https://www.cnblogs.com/fdyang/p/3701527.html


相关教程