C#实现软件开机自启动原理与代码

1、软件自启动原理

    软件自启动的原理要从Windows的注册表聊起,在Windows操作系统下,主要有2个文件夹和8个注册表键项控制程序的自启动,这部分的详细介绍可以参看博客http://www.cnblogs.com/fukajg/archive/2012/08/10/2631250.html。本程序通过“Run”键值实现,Run键值是自启动程序最常见的地方。它的位置在[HKEY_CURRENT_USER\Softvvare\Microsoft\Windows\CurrentVersion\Run]和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Run]。其中[HKEY_CURRENT_USER]根键下的“Run”键值紧接着[HKEY_LOCAL_MACHINE]下的“Run”键值运行,但两个键值都在“启动”文件夹之前加载。  

2、C#相关类和方法介绍

    Application.ExecutablePath 属性可以获取启动应用程序的可执行文件的路径,包括可执行文件的名称;Registry.LocalMachine 字段包含本地计算机的配置数据,该字段读取 Windows 注册表基项 HKEY_LOCAL_MACHINE;RegistryKey.CreateSubKey 方法创建一个新子项或打开一个现有子项以进行写访问;RegistryKey.SetValue设置指定的名称/值对;RegistryKey.DeleteValue 方法 (String, Boolean)是从此项中删除指定的值。

    在3编程实践中,对checkbox控件的Checkedchanged事件进行设置,在设置开机自启动中,启动软件JK信息写入“Run”键值;取消开机自启动中,删除软件JK信息“Run”键值中的值。

3、C#编程实现

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked) //设置开机自启动  
            {
                MessageBox.Show ("设置开机自启动,需要修改注册表","提示");  
                string path = Application.ExecutablePath;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
                rk2.SetValue("Jc", path);  //注意,Jc为自启动软件的软件名
                rk2.Close();
                rk.Close();
            }
            else //取消开机自启动  
            {
                MessageBox.Show ("取消开机自启动,需要修改注册表","提示");  
                string path = Application.ExecutablePath;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
                rk2.DeleteValue("Jc", false);
                rk2.Close();
                rk.Close();
            }  
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

python开发_logging_日志处理

============================================================

883
来自专栏about云

flume搜集日志:如何解决实时不断追加的日志文件及不断增加的文件个数问题

本文的背景: 在搜集日志的过程中,日志文件的个数及日志文件需要不断的追加。flume1.6中,可以使用tail -f可以解决不断追加的文件,但是由于日志文件的个...

3307
来自专栏iOSDevLog

Xcode 9 制作 iOS 通用 Framework创建 Framework模拟器和真机通用 FrameworkBundle使用 Framework

3637
来自专栏.Net移动开发

C# 因缺少CategoryName,而未能初始化 的解决办法

  ((System.ComponentModel.ISupportInitialize)(this.performanceCounter1)).EndInit...

1072
来自专栏Ryan Miao

centos-5.5安装vmvare tools

centos-5.5安装vmvare tools 虚拟机管理,安装tools 找到VMwareTools压缩包                         ...

3008
来自专栏晓晨的专栏

Visual Studio 2017 设置透明背景图

给大家分享一下,如何为VS2017设置透明背景图。下面是一张设置前和设置后的图片。

1513
来自专栏Kubernetes

containerd源码分析

本文是对containerd v0.2.4的源码分析。 ##Containerd源码流程图 ? 源码接口调用详情 从ctr调用containerd-api #...

5567
来自专栏小白课代表

Windows 10 让人不爽的骚操作之一!

众所周知,WIN10 系统回收站的右键菜单中有一个 固定到"开始"屏幕,经常被误点到,让轻狂相当不爽,就是这个玩意:

792
来自专栏游戏杂谈

IE8新建选项卡提示网页错误的解决办法

2、找到HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0\win32

582
来自专栏晓晨的专栏

Visual Studio 2017 设置透明背景图

今晚本来打算写一篇关于ids4解析的文章,可是打开VS2017,看到主题被同步成了黑色(设置透明背景需要将VS主题设置为黑色),我在公司电脑的VS2017已经被...

2547

扫码关注云+社区