码迷,mamicode.com
首页 > Windows程序 > 详细

c# windows server安装启动与卸载

时间:2017-10-24 11:49:42      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:win   write   start   str   权限   server   delete   microsoft   获取   

使用installutil.exe安装卸载服务时,由于需要指向服务的全路径,由于生成目录往往不是服务发布的最终目录,很不便利,下面介绍两种方式方便操作:

方式一:

项目中加入install.bat与uninstall.bat文件,设置为始终复制,生成后,在debug\bin下双击install.bat安装启动服务,双击uninstall.bat卸载服务,需要管理员权限时右击以管理员运行。

其中install.bat文件如下:

@echo off 
@title 安装windows服务
set curdir=%~dp0 
cd /d %curdir%
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe 服务.exe
echo==============================================================
echo=
echo         windows服务程序安装
echo=
echo==============================================================
@echo off 
net start 服务名
pause

其中的

set curdir=%~dp0 
cd /d %curdir%

是通过获取当前bat文件所在的目录,然后cd 到该目录来解决该问题

uninstall.bat文件如下:

@echo off 
@title 卸载Windows服务
set curdir=%~dp0
cd /d %curdir%
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u 服务.exe
echo==============================================================
echo=
echo          windows服务卸载
echo=
echo==============================================================
@echo off 
pause

方式二:

使用windows自带的sc命令安装或卸载服务

正常创建windows server时,main函数如下:

static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                new myService()//服务
            };
            ServiceBase.Run(ServicesToRun);//在服务控制管理器 (SCM) 中注册多项服务的可执行文件。
        }
    }

然后我们改程序入口Main方法,让其在启动时识别是Windows应用程序还是Windows服务,如果是应用程序就执行应用程序的代码,如果是服务就执行MainService的代码,如果是服务,我给了一个"s"参数,如果有这个参数就证明是Windows服务,然后启动MainService,更改后的Main如下:

static void Main(string[] args)
{
    //有参数,并且第一个参数时s时,执行服务注册
    if (args.Length > 0 && args[0] == "s")
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
                    new MyService()//服务
        };
        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");
                //其中myserver是安装后的服务名称,displayName为安装后服务的描述,安装指向的服务文件对应的是path
                Console.WriteLine("安装成功");
                Process.Start("sc","start myserver");
                Console.WriteLine("服务启动成功");
                Console.Read();
                break;
            case 2:
                Process.Start("sc", "delete myserver");
                Console.WriteLine("卸载成功");
                Process.Start("sc", "stop myserver");//有时服务命名删除成功了,但是服务仍然存在,这可能是由于服务正在处于启动状态stop一下就消失了
                Console.WriteLine("卸载成功");
                Console.Read(); 
                break; 
            case 3: 
                break; 
        } 
    } 
}       

 

     

 

c# windows server安装启动与卸载

标签:win   write   start   str   权限   server   delete   microsoft   获取   

原文地址:http://www.cnblogs.com/lcawen/p/7722018.html

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