[转]C#开发Windows服务 以及创建 安装.bat 和 卸载.bat

原贴地址: C#开发Windows服务(附源码DEMO) - 漫步猫 - 博客园


首先是创建一个项目:

创建完后是这个样子:

然后给自己的服务改一个自己想要的名字,我这里修改成MyWindowsWeiHuService,这个同时也是服务运行时候的名字,也就是鼠标右击“我的电脑”——管理——服务和应用程序——服务 里面显示的服务名。

然后开始写代码,服务运行时,执行什么代码,服务关闭时,执行什么代码:

加入你要做的事情,是创建一个txt,然后往txt里面写点东西,代码如下:

 请看代码

写完代码之后,回到设计界面,操作如下:

在设计视图,点击右键,点击“添加安装程序”

点击完“添加安装程序”后

 点击serviceInstaller1

可以写一下服务的描述

可以选择服务的启动类型

然后,点击serviceProcessInstaller1,设置一下Account 为LocalSystem

截止到目前,Windows服务的开发已经完成了。点击F5生成就行。

生成后,打开解决方案的 bin\Debug 文件夹,会看到生成后的文件:

服务是不能够直接双击安装的,需要在命令行里调用 installutil.exe,来安装才行,这个东西的完整路径是:%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe

运行的命令是: %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe  这里接着你服务的完成路径。

在本案例中,完成安装命令是 :%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\软件开发测试\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

当你将这个命令拷贝到CMD里面运行的时候,你会发现安装不成功,用C#开发出来的windows服务安装失败。

出现这个问题的运用,是因为你的CMD,没有使用管理员运行。只需要用管理员运行CMD,再在CMD里面打命令,就会安装成功了。

为了方便,我们可以将安装命令做成bat文件,然后右键管理员运行bat文件,就可以了

bat文件里面的内容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\软件开发测试\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

pause

为什么要加上pause呢,因为不加的话,这个黑窗口会一闪而过,感觉好像中了病毒一样。

最后我们创建了一个“安装.bat”

我们右键,以管理员运行“安装.bat”

成功了,再敲一下回车,黑色窗口就会消失

我打开windows的服务管理器界面,看看

 可以看到我们维护的名字与描述。

现在服务还没有启动,我们启动服务

启动后,我们可以看到C盘下面有我们刚才创建的文件

我们现在来结束服务吧

 结束后,打开我们创建的文件看看

好的。现在我们来讲如何删除服务。

方法跟安装有点类似,也是创建一个bat文件,bat文件里面写以下内容

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u D:\软件开发测试\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe
pause

保存为“卸载.bat”

同样右键,以管理员运行

卸载成功!

 源码DEMO下载地址:C#开发Windows服务DEMO-C#代码类资源-CSDN下载


 完整代码:

using RongZi.DBUtility;
using System;
using System.ComponentModel;
using System.Configuration;
using System.IO;
using System.ServiceProcess;
using System.Timers;

namespace MyWindowsService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        //服务启动
        protected override void OnStart(string[] args)
        {
            Log(LogType.info, "服务启动!");

            Timer timer = new Timer();
            timer.Interval = 60 * 1000; // 60 seconds 60秒执行一次
            timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
            timer.Start();
        }
        //定时自动
        public void OnTimer(object sender, ElapsedEventArgs args)
        {
            try
            {
                string sql = "select getdate()";
                object obj = SqlHelper.ExecuteScalar(sql);//数据库操作

                Log(LogType.info, "SQL查询结果:" + obj.ToString());
            }
            catch (Exception ex)
            {
                Log(LogType.error, ex.Message, ex.ToString() + ex.StackTrace);
            }
        }
        //继续
        protected override void OnContinue()
        {
            Log(LogType.info, "服务继续!");
        }
        //停止
        protected override void OnStop()
        {
            Log(LogType.info, "服务停止!");
        }
        private static void Log(LogType logType, string log, string ex = "")
        {
            // string path = "D:\\MyWindowsService_Log\\" + logType;//文件夹路径:
            string logPath = string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["logPath"]) ? "D:\\" : ConfigurationManager.AppSettings["logPath"].ToString();
            string path = logPath + logType;//文件夹路径:
            if (!Directory.Exists(path))//判断文件夹是否存在
            {
                Directory.CreateDirectory(path);//不存在,创建文件夹
            }
            using (FileStream stream = new FileStream(path + "\\" + DateTime.Today.ToString("yyyyMMdd") + ".txt", FileMode.Append))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.WriteLine("---------------------" + DateTime.Now + "---------------------");
                if (!string.IsNullOrWhiteSpace(log))
                    writer.WriteLine(log);
                if (!string.IsNullOrWhiteSpace(ex))
                    writer.WriteLine(ex);
                writer.WriteLine("");
            }
        }
        public enum LogType
        {
            [Description("运行日志")]
            info,
            [Description("调试日志")]
            debug,
            [Description("警告日志")]
            warning,
            [Description("报错日志")]
            error,
        }
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!--日志路径,默认: D:\-->
    <add key="logPath" value="D:\MyWindowsService_Log\"/>
  </appSettings>
  <connectionStrings>
    <add name="DB" connectionString="Initial Catalog=DB;Data Source=.;User ID=sa;Password=123456" />    
  </connectionStrings>
</configuration>

安装.bat:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe c:\1\MyWindowsService.exe
pause

卸载.bat

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u c:\1\MyWindowsService.exe
pause

用记事本打开 "_安装.bat"和"_卸载.bat",修改*.exe文件所在的实际物理路径,

然后再点击右键,以"管理员身份"执行安装或卸载.

按装后→桌面→我的电脑→右键→管理,服务→找到你安装的服务→启动服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值