C#实现应用程序自启动的几种方法(winform为例 -以xml配置文件为例)


前言

上次技师分享了通过修改计算机注册表的方式,用json这种配置文件来实现设置开机是否自动启动,这次我们使用xml配置文件来设置是否开机自启动


提示:以下是本篇文章正文内容,下面案例可供参考

一、GUI 设置

这次我们不使用checkbox控件,我们使用radiobutton来试试,在一个groupbox中放入两个radiobutton,一个命名为rbAutoLaunchTrue,另一个命名为rbAutoLaunchFalse
在这里插入图片描述

二、编写xml文件

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
  <settingNo>ping0401</settingNo>
  <appSetting>
    <!--<seting Name="IsAutoLaunch" Value="false" Des="是否开机自启动"/>-->
    <seting IsAutoLaunch="False" Des="是否开机自启动" />
  </appSetting>
</appSettings>

三.逻辑代码(和json版本类似)

代码如下(示例):

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace AutoLaunch_XML
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            rbAutoLaunchTrue.Checked = ReadXML("AutoLaunch");
        }

        private bool ReadXML(string key)
        {
            XmlDocument doc = new XmlDocument();
            string path = Application.StartupPath + @"\appSettings.xml";
            //没有文件就先创建一个,默认不开机自启动
            if(!File.Exists(path))
            {
                XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
                doc.AppendChild(dec);

                XmlElement appSettings = doc.CreateElement("appSettings");
                doc.AppendChild(appSettings);

                XmlElement settingNo = doc.CreateElement("settingNo");
                settingNo.InnerText = "ping0401";

                XmlElement appSetting = doc.CreateElement("appSetting");
                appSettings.AppendChild(appSetting);

                XmlElement seting1 = doc.CreateElement("setting");
                // 给节点添加属性
                //seting1.SetAttribute("Name", "IsAutoLaunch");
                seting1.SetAttribute("IsAutoLaunch", "false");
                seting1.SetAttribute("Des", "是否开机自启动");
                appSetting.AppendChild(seting1);

                doc.Save(path);
                return true;
            }

            // 存在xml文件就读取
            // 加载xml文档
            doc.Load(path);
            XmlNodeList xnl = doc.SelectNodes("/appSettings/appSetting/seting");
            string str = xnl[0].Attributes["IsAutoLaunch"].Value;
            return bool.Parse(str);

        }

        
        private void rbAutoLaunchTrue_CheckedChanged(object sender, EventArgs e)
        {
            string execPath = Application.ExecutablePath;
            string execFileName = Path.GetFileName(execPath);
            string regPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
            RegistryKey rk = Registry.LocalMachine.OpenSubKey(regPath, true);
            if (rk == null)
            {
                rk = Registry.LocalMachine.CreateSubKey(regPath);
            }
            if (rbAutoLaunchTrue.Checked)
            {
                rk.SetValue(execFileName, execPath);
            }
            else
            {
                rk.DeleteValue(execFileName, false);
            }
            rk.Close();

            // 持久化到xml文件中
            WriteXML("IsAutoLaunch", rbAutoLaunchTrue.Checked);
        }

        private void WriteXML(string key, bool @checked)
        {
            XmlDocument doc = new XmlDocument();
            string path = Application.StartupPath + @"\appSettings.xml";
            //没有文件就先创建一个,默认不开机自启动
            if (!File.Exists(path))
            {
                XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
                doc.AppendChild(dec);

                XmlElement appSettings = doc.CreateElement("appSettings");
                doc.AppendChild(appSettings);

                XmlElement settingNo = doc.CreateElement("settingNo");
                settingNo.InnerText = "ping0401";

                XmlElement appSetting = doc.CreateElement("appSetting");
                appSettings.AppendChild(appSetting);

                XmlElement seting1 = doc.CreateElement("setting");
                // 给节点添加属性
                //seting1.SetAttribute("Name", "IsAutoLaunch");
                seting1.SetAttribute("IsAutoLaunch", "false");
                seting1.SetAttribute("Des", "是否开机自启动");
                appSetting.AppendChild(seting1);

                doc.Save(path);                
            }

            // 存在就读取并修改
            doc.Load(path);
            XmlNodeList xnl = doc.SelectNodes("/appSettings/appSetting/seting");
            xnl[0].Attributes["IsAutoLaunch"].Value = @checked.ToString();
            doc.Save(path);

        }
    }
}


总结

开机自启动在前面一篇文章中说过了,这里主要涉及到对xml文件的读取,写入,修改等操作。这个例子中还有大量的冗余代码,大家用的时候可以提取方法,提取字段,优化一波哦o( ̄▽ ̄)ブ

另外,有个设置可以在编译时就把xml配置文件拷贝到debug文件夹中
复制到输出目录 -->如果教新则复制
在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值