C#读取ini文件数据的方法和后台服务的相关知识

本章主要是C#获取ini文件里的数据和怎么写一个C#服务和服务的安装使用:

1.下面是一段循环获取ini文件数据的方法

 /// <summary>
 /// 循环遍历一个文件夹下的所有ini文件
 /// </summary>
 /// <param name="File_Path"></param>
 public void ReadAllIniFile(string content)
 {
            try
            {
                string File_Path = "C:/Users/user/Desktop/ini";
                String[] files = Directory.GetFiles(File_Path, "*.ini", SearchOption.AllDirectories);
                foreach (string NextFile in files)
                {
                    string logno = INIOperationClass.INIGetStringValue(NextFile, "RecordInfo", "LogNo", null);               

                    //连接mysql数据库的配置文件

                    String mysqlStr = "Database=test;Data Source=127.0.0.1;User Id=root;Password=;pooling=false;CharSet=utf8;port=3306";

                    MySqlConnection sqlcon = new MySqlConnection(mysqlStr);
                    sqlcon.Open();
                    string InsertSql = "insert into test_data(td_log_no,) values ('" + logno + "')";

                    MySqlCommand cmd = new MySqlCommand(InsertSql, sqlcon);

                    //执行sql语句并判断是否生效
                    if (cmd.ExecuteNonQuery() > 0)
                    {
                        ////MessageBox.Show("333");
                        //删除
                        File.Delete(NextFile);  
                    }
                    sqlcon.Close();
                }
            }
            catch
            {

            }
  }

上面INIOperationClass是一个操作ini文件的类(读取ini文件节点的键和值等操作),此类已经上传到资源里可下载!

2.接下来我们需要介绍的是如何将上面获取ini文件的代码写成一个后台服务并安装运行:

(1)首先我们创建一个Windows服务,如图一所示:

C#读取ini文件数据的方法和后台服务的相关知识

图1


(2)在服务里我们可以定义以下代码:

   //定义一个全局事件变量

   System.Threading.Timer _timer;

   //服务启动执行
   protected override void OnStart(string[] args)
   {
            InitialSaveRecord();
   }
//服务停止执行
   protected override void OnStop()
   {
            if (recordTimer != null)
            {
                recordTimer.Dispose();
            }  
   }
   //定义一个循环请求的方法
   public void InitialSaveRecord() 
   {        

            //设置计时器事件间隔执行时间
            _timer = new System.Threading.Timer(CallbackTask, null, 5 * 1000, Timeout.Infinite);//20 * 1000);
    }

    //定义程序运行的方法
    private void CallbackTask(Object stateInfo)
    {
            InsertRecordClass InsertRecordClass = new InsertRecordClass();

    //循环读取ini文件的类
            InsertRecordClass.ReadAllIniFile(string.Format(@"当前记录时间:{0},状况:程序运行正常!", DateTime.Now));
            _timer.Change(10 * 1000, Timeout.Infinite);
     }

(3)、添加window服务安装程序

1、打开Service1.cs【设计】页面,点击右键,选择【添加安装程序】,会出现serviceInstaller1和serviceProcessInstaller1两个组件

2、将serviceProcessInstaller1的Account属性设为【LocalSystem】, serviceInstaller1的StartType属性设为【Automatic】,ServiceName属性可设置服务名称,此后在【管理工具】--》【服务】中即显示此名称

3、ProjectInstaller.cs文件,在安装服务后一般还需手动启动(即使上述StartType属性设为【Automatic】),可在ProjectInstaller.cs添加如下代码实现安装后自动启动

public ProjectInstaller()

{

      InitializeComponent();

      this.Committed += new InstallEventHandler(ProjectInstaller_Committed);   

}

 

private void ProjectInstaller_Committed(object sender, InstallEventArgs e)

{

   //参数为服务的名字

      System.ServiceProcess.ServiceController controller = newSystem.ServiceProcess.ServiceController("服务       名称");                     

      controller.Start();

}   


(4)代码完成后我们需要怎么进行服务的安装(关于C#服务的安装:cmd命令执行)

下面首先我们介绍一下cmd命令的安装和卸载:

1、输入cmd(命令行),输入cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319,

     2.0为cd C:\WINDOWS\Microsoft.Net\Framework\v2.0.50727

2、安装服务(项目生成的exe文件路径)

     InstallUtil "E:\WindowsService1\bin\Debug\Service1.exe"

3、卸载服务

     InstallUtil  /u "E:\WindowsService1\bin\Debug\Service1.exe"


(5)、查看window服务

控制面板-->管理工具-->服务,可在此手动启动,停止服务


(6)调试window服务

1、通过【事件查看器】查看

2、直接在程序中调试(菜单-->调试-->附加进程-->服务名(这里的服务名是项目名称,不是ServiceName属性自定义的名称,

      所以建议自定义名称和项目名称保持一致,另外需勾选【显示所有用户的进程】才能看到服务名)-->附加

3. 在程序中打断点调试即可,另外调试服务时服务必须已启动(管理工具-->服务)


如图2可以看到效果:

C#读取ini文件数据的方法和后台服务的相关知识

图2