• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 

不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载。

今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以让一个exe即能直接运行也行安装为windows服务


首先我们创建一个Windows应用程序,(我创建的是控制台程序,WinForm也一样)

 

 

接下来在项目中添加一个Windows服务类

 

然后双击“MainService.cs”,在上面点右键“打开代码”

 

这里面写服务的具体实现,以下是我写的示例代码

 partial class MainService : ServiceBase
    {
        public MainService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO:  在此处添加代码以启动服务。
            System.IO.File.AppendAllText("D:\\log.txt", "服务已启动……" + DateTime.Now.ToString());
        }

        protected override void OnStop()
        {
            // TODO:  在此处添加代码以执行停止服务所需的关闭操作。
            System.IO.File.AppendAllText("D:\\log.txt", "服务已停止……" + DateTime.Now.ToString());
        }
    }

然后我们改程序入口Main方法,让其在启动时识别是Windows应用程序还是Windows服务,如果是应用程序就执行应用程序的代码,如果是服务就执行MainService的代码

如果是服务,我给了一个"s"参数,如果有这个参数就证明是Windows服务,然后启动MainService

 static void Main(string[] args)
        {
           //如果传递了"s"参数就启动服务
            if (args.Length > 0 && args[0] == "s")
            {
               //启动服务的代码,可以从其它地方拷贝
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new MainService(),
                };
                ServiceBase.Run(ServicesToRun);
            }
            else
            {}

然后,我们再实现应用程序的功能,就是上面的else语句块,应用程序的功能就是安装/卸载服务,可以用windows自带的sc命令来进行安装和卸载,具体代码如下:

                Console.WriteLine("这是Windows应用程序");
                Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出");
                var rs = int.Parse(Console.ReadLine());
                switch (rs)
                {
                    case 1:
                        //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序
                        var path = Process.GetCurrentProcess().MainModule.FileName + " s";
                        Process.Start("sc", "create myserver binpath= \"" + path + "\" displayName= 我的服务 start= auto");
                        Console.WriteLine("安装成功");
                        Console.Read();
                        break;
                    case 2:
                        Process.Start("sc", "delete myserver");
                        Console.WriteLine("卸载成功");
                        Console.Read();
                        break;
                    case 3: break;
                }

这样我们就实现了一个即是可执行程序又是Windows服务的应用程序

Main方法完整代码如下

 static void Main(string[] args)
        {
            if (args.Length > 0 && args[0] == "s")
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new MainService(),
                };
                ServiceBase.Run(ServicesToRun);
            }
            else
            {
                Console.WriteLine("这是Windows应用程序");
                Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出");
                var rs = int.Parse(Console.ReadLine());
                switch (rs)
                {
                    case 1:
                        //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序
                        var path = Process.GetCurrentProcess().MainModule.FileName + " s";
                        Process.Start("sc", "create myserver binpath= \"" + path + "\" displayName= 我的服务 start= auto");
                        Console.WriteLine("安装成功");
                        Console.Read();
                        break;
                    case 2:
                        Process.Start("sc", "delete myserver");
                        Console.WriteLine("卸载成功");
                        Console.Read();
                        break;
                    case 3: break;
                }
            }
        }

至此,程序已基本写完,接下来我们测试一下

直接双击ServiceOrApp.exe

 

输入 1

提示安装成功,然后运行“services.msc"打开服务管理器

可以发现我们的服务已安装成功,然后右键启动服务

 

成功启动

然后去D盘看看log.txt

 

说明服务执行正常

我们再停止服务

 

成功停止后再看看D盘的log.txt文件

 

看到以上内容,说明服务启动和停止都没问题(忘了输出换行符 - -!)

然后我们再试一下卸载服务,还是双击ServiceOrApp.exe,选择2

 

提示卸载成功,然后再运行“services.msc"打开服务管理器

 

可以看到已经没有”我的服务“了,已成功卸载

这里安装和卸载主要运用了windows的sc命令,然后使用启动参数来判断是服务还是程序以执行不同的代码

不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载。

今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以让一个exe即能直接运行也行安装为windows服务


首先我们创建一个Windows应用程序,(我创建的是控制台程序,WinForm也一样)

 

 

接下来在项目中添加一个Windows服务类

 

然后双击“MainService.cs”,在上面点右键“打开代码”

 

这里面写服务的具体实现,以下是我写的示例代码

 partial class MainService : ServiceBase
    {
        public MainService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO:  在此处添加代码以启动服务。
            System.IO.File.AppendAllText("D:\\log.txt", "服务已启动……" + DateTime.Now.ToString());
        }

        protected override void OnStop()
        {
            // TODO:  在此处添加代码以执行停止服务所需的关闭操作。
            System.IO.File.AppendAllText("D:\\log.txt", "服务已停止……" + DateTime.Now.ToString());
        }
    }

然后我们改程序入口Main方法,让其在启动时识别是Windows应用程序还是Windows服务,如果是应用程序就执行应用程序的代码,如果是服务就执行MainService的代码

如果是服务,我给了一个"s"参数,如果有这个参数就证明是Windows服务,然后启动MainService

 static void Main(string[] args)
        {
           //如果传递了"s"参数就启动服务
            if (args.Length > 0 && args[0] == "s")
            {
               //启动服务的代码,可以从其它地方拷贝
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new MainService(),
                };
                ServiceBase.Run(ServicesToRun);
            }
            else
            {}

然后,我们再实现应用程序的功能,就是上面的else语句块,应用程序的功能就是安装/卸载服务,可以用windows自带的sc命令来进行安装和卸载,具体代码如下:

                Console.WriteLine("这是Windows应用程序");
                Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出");
                var rs = int.Parse(Console.ReadLine());
                switch (rs)
                {
                    case 1:
                        //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序
                        var path = Process.GetCurrentProcess().MainModule.FileName + " s";
                        Process.Start("sc", "create myserver binpath= \"" + path + "\" displayName= 我的服务 start= auto");
                        Console.WriteLine("安装成功");
                        Console.Read();
                        break;
                    case 2:
                        Process.Start("sc", "delete myserver");
                        Console.WriteLine("卸载成功");
                        Console.Read();
                        break;
                    case 3: break;
                }

这样我们就实现了一个即是可执行程序又是Windows服务的应用程序

Main方法完整代码如下

 static void Main(string[] args)
        {
            if (args.Length > 0 && args[0] == "s")
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new MainService(),
                };
                ServiceBase.Run(ServicesToRun);
            }
            else
            {
                Console.WriteLine("这是Windows应用程序");
                Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出");
                var rs = int.Parse(Console.ReadLine());
                switch (rs)
                {
                    case 1:
                        //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序
                        var path = Process.GetCurrentProcess().MainModule.FileName + " s";
                        Process.Start("sc", "create myserver binpath= \"" + path + "\" displayName= 我的服务 start= auto");
                        Console.WriteLine("安装成功");
                        Console.Read();
                        break;
                    case 2:
                        Process.Start("sc", "delete myserver");
                        Console.WriteLine("卸载成功");
                        Console.Read();
                        break;
                    case 3: break;
                }
            }
        }

至此,程序已基本写完,接下来我们测试一下

直接双击ServiceOrApp.exe

 

输入 1

提示安装成功,然后运行“services.msc"打开服务管理器

可以发现我们的服务已安装成功,然后右键启动服务

 

成功启动

然后去D盘看看log.txt

 

说明服务执行正常

我们再停止服务

 

成功停止后再看看D盘的log.txt文件

 

看到以上内容,说明服务启动和停止都没问题(忘了输出换行符 - -!)

然后我们再试一下卸载服务,还是双击ServiceOrApp.exe,选择2

 

提示卸载成功,然后再运行“services.msc"打开服务管理器

 

可以看到已经没有”我的服务“了,已成功卸载

这里安装和卸载主要运用了windows的sc命令,然后使用启动参数来判断是服务还是程序以执行不同的代码


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#后台去除中文韩文日文发布时间:2022-07-14
下一篇:
C/S和B/S应用程序的区别发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap