码迷,mamicode.com
首页 > 其他好文 > 详细

(C#) 调用执行批处理文件

时间:2014-05-01 08:29:47      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   javascript   string   art   get   color   

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

bubuko.com,布布扣
       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
                    };

                }
            }    
bubuko.com,布布扣

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

bubuko.com,布布扣
 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);
bubuko.com,布布扣

 

(C#) 调用执行批处理文件,布布扣,bubuko.com

(C#) 调用执行批处理文件

标签:style   blog   class   code   java   tar   javascript   string   art   get   color   

原文地址:http://www.cnblogs.com/fdyang/p/3701527.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!