c#执行cmd命令创建服务

来源:互联网 发布:js中sleep怎么使用 编辑:程序博客网 时间:2024/06/14 14:27

相关参考:

http://www.cnblogs.com/maanshancss/p/6888168.html

http://blog.csdn.net/joyhen/article/details/41125259

上码:

using System;using System.Diagnostics;namespace App{    public class CmdHandle    {        public static string excuteCmd(string cmd)        {            Process proc = new Process();            proc.StartInfo.FileName = "cmd.exe";            proc.StartInfo.UseShellExecute = false;            proc.StartInfo.RedirectStandardInput = false;            proc.StartInfo.RedirectStandardOutput = true;            proc.StartInfo.RedirectStandardError = true;            proc.StartInfo.CreateNoWindow = true;            proc.StartInfo.Arguments = "/c " + cmd;            proc.Start();            proc.WaitForExit();            string ret = proc.StandardOutput.ReadToEnd() + proc.StandardError.ReadToEnd();            Console.WriteLine(ret);            return ret;        }        /// <summary>        /// 执行cmd.exe命令        /// </summary>        public static string ExeCommand(string commandText)        {            return ExeCommand(new string[] { commandText });        }        /// <summary>        ///执行多条cmd.exe命令        /// </summary>        public static string ExeCommand(string[] commandTexts)        {            Process p = new Process();            p.StartInfo.FileName = "cmd.exe";            p.StartInfo.UseShellExecute = false;            p.StartInfo.RedirectStandardInput = true;            p.StartInfo.RedirectStandardOutput = true;            p.StartInfo.RedirectStandardError = true;            p.StartInfo.CreateNoWindow = true;            string strOutput = null;            try            {                p.Start();                foreach (string item in commandTexts)                {                    p.StandardInput.WriteLine(item);                }                p.StandardInput.WriteLine("exit");                strOutput = p.StandardOutput.ReadToEnd();                //strOutput = Encoding.UTF8.GetString(Encoding.Default.GetBytes(strOutput));                p.WaitForExit();                p.Close();            }            catch (Exception e)            {                strOutput = e.Message;            }            return strOutput;        }        /// <summary>        /// 启动外部Windows应用程序,隐藏程序界面        /// </summary>        public static bool StartApp(string appName)        {            return StartApp(appName, ProcessWindowStyle.Hidden);        }        /// <summary>        /// 启动外部应用程序        /// </summary>        public static bool StartApp(string appName, ProcessWindowStyle style)        {            return StartApp(appName, null, style);        }        /// <summary>        ///  启动外部应用程序,隐藏程序界面        /// </summary>        public static bool StartApp(string appName, string arguments)        {            return StartApp(appName, arguments, ProcessWindowStyle.Hidden);        }        /// <summary>        /// 启动外部应用程序        /// </summary>        public static bool StartApp(string appName, string arguments, ProcessWindowStyle style)        {            bool blnRst = false;            Process p = new Process();            p.StartInfo.FileName = appName;//exe,bat and so on            p.StartInfo.WindowStyle = style;            p.StartInfo.Arguments = arguments;            try            {                p.Start();                p.WaitForExit();                p.Close();                blnRst = true;            }            catch            {            }            return blnRst;        }    }}
demo:
using System;using System.ServiceProcess;namespace App{    class Program    {        static void Main(string[] args)        {            string serverName = "MemcachedServer12230";            //UnloadServer(serverName); //卸载服务            CreateServer(serverName);//创建服务            //System.Threading.Tasks.Task.Run(() =>            //{            //    CmdHandle.StartApp(@"F:\ff\bin\Debug\ff.exe", System.Diagnostics.ProcessWindowStyle.Normal);            //});            Console.ReadLine();        }        /// <summary>        /// 创建服务        /// </summary>        private static void CreateServer(string serverName)        {            //创建服务            string createService = "sc create " + serverName + " binPath= \"F:\\memcached.exe - d runservice - m 500 - p 12230\" start= auto DisplayName= \"Memcached Server (12230)\"";            string descriptionS = "sc description " + serverName + " \"缓存服务:端口12230\"";            string serverPath = "sc config TrustedInstaller binpath= \"%SystemRoot%\\servicing\\TrustedInstaller.exe\"";            string starService = "net start " + serverName;            //string msg = CmdHandle.excuteCmd(createService);            //Console.WriteLine("[CreateServer]: '{0}' ok--->{1}", serverName, msg);            CmdHandle.ExeCommand(new string[] { createService, descriptionS, starService });            Console.WriteLine("[CreateServer]: '{0}' ok", serverName);        }        /// <summary>        /// 卸载服务        /// </summary>        private static void UnloadServer(string serverName)        {            System.Text.StringBuilder strb = new System.Text.StringBuilder();            if (IsServiceExisted(serverName))            {                strb.AppendLine(string.Format("net stop {0}", serverName));  //1.停止服务                strb.AppendLine(string.Format("sc delete {0}", serverName)); //2.删除服务                CmdHandle.ExeCommand(strb.ToString());                Console.WriteLine("[UnloadServer]: ok");            }            else            {                Console.WriteLine("[UnloadServer]: Server '{0}' not exist", serverName);            }        }        /// <summary>        /// 服务是否存在        /// </summary>        public static bool IsServiceExisted(string serviceName)        {            ServiceController[] services = ServiceController.GetServices();            foreach (ServiceController s in services)            {                if (s.ServiceName == serviceName)                {                    return true;                }            }            return false;        }        public static void ServiceStart(string serviceName)        {            ServiceController[] services = ServiceController.GetServices();            foreach (ServiceController s in services)            {                if (s.ServiceName == serviceName)                {                    s.Start();                }            }        }        /// <summary>        /// 获取服务状态        /// </summary>        public static ServiceControllerStatus GetServiceStatus(string serviceName)        {            ServiceController service = new ServiceController(serviceName);            return service.Status;        }        //...    }}

创建的服务在启动的时候有问题,会提示“服务没有及时响应启动或控制请求 1053”,可以在网上早到应对方案


原创粉丝点击