C#调用命令行@服务

来源:互联网 发布:excel表导入sql数据库 编辑:程序博客网 时间:2024/06/07 14:40

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 运行cmd命令
        /// 不显示命令窗口
        /// </summary>
        /// <param name="cmdExe">指定应用程序的完整路径</param>
        /// <param name="cmdStr">执行命令行参数</param>
        static bool RunCmd2(string cmdExe, string cmdStr)
        {
            bool result = false;
            try
            {
                using (Process myPro = new Process())
                {
                    myPro.StartInfo.FileName = "cmd.exe";
                    myPro.StartInfo.UseShellExecute = false;
                    myPro.StartInfo.RedirectStandardInput = true;
                    myPro.StartInfo.RedirectStandardOutput = true;
                    myPro.StartInfo.RedirectStandardError = true;
                    myPro.StartInfo.CreateNoWindow = true;
                    myPro.Start();
                    //如果调用程序路径中有空格时,cmd命令执行失败,可以用双引号括起来 ,在这里两个引号表示一个引号(转义)
                    string str = string.Format(@"""{0}"" {1} {2}", cmdExe, cmdStr, "&exit");

                    myPro.StandardInput.WriteLine(str);
                    myPro.StandardInput.AutoFlush = true;

                    //获取cmd窗口的输出信息(正式下面这句导致同步等待)
                    //string output = myPro.StandardOutput.ReadToEnd();
                    myPro.WaitForExit();
                    myPro.Close();
                    result = true;
                }
            }
            catch
            {

            }
            return result;
        }

        protected override void OnStart(string[] args)
        {
            string cmdExe = @"C:\Windows\System32\notepad.exe";
            string cmdStr = @"D:\toDo.txt";
            bool bRet = RunCmd2(cmdExe, cmdStr);//异步
        }

        protected override void OnStop()
        {
            string cmdExe = @"C:\Windows\System32\taskkill.exe";
            string cmdStr = @" /IM notepad.exe";
            bool bRet = RunCmd2(cmdExe, cmdStr);//异步
        }
    }
}

0 0
原创粉丝点击