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 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Linux下部署Samba服务环境的操作记录

关于Linux和Windows系统之间的文件传输,很多人选择使用FTP,相对较安全,但是有时还是会出现一些问题,比如上传文件时,文件名莫名出现乱码,文件大小改变...

3838
来自专栏娱乐心理测试

小程序如何避免多次点击,重复触发事件

作为前端开发,我们经常会遇到的场景,比如用户点击获取验证码按钮时,没有反应,大部分用户都会接着点击,这就会造成用户收到多条验证码,这是因为后台api请求比较慢,...

3245
来自专栏漏斗社区

NSA工具包实战--32位XP系统(MS17-010)

近期因为工控安全大赛的原因,遇到了32系统存在17-010用matesploit无法利用的缘故。目前斗哥的metasploit v4.17.2-dev只支持wi...

841
来自专栏雨过天晴

转 PHP-redis编译成功

1273
来自专栏派森公园

docker的reap问题

在使用docker容器的时候,应该了解“PID1僵尸进程reap”问题。如果使用的时候不加注意,可能会导致出现一些意想不到的问题。

893
来自专栏生信技能树

安装VEP及其注释数据库

为了其它相关软件的顺利运行,我们根据教程来设置默认的安装目录及变量环境:Ensembl's VEP , If you don't have VEP instal...

1624
来自专栏伪君子的梦呓

在 Windows 下安装 Scrapy

1404
来自专栏重庆的技术分享区

mongoexport导出数据时遇到的种种问题(好坑)

9173
来自专栏林德熙的博客

win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序 VisualStudio创建项目引用项目创建通用结构设置控制器运行网站UWP 连接上传数据

本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台。 本文因为没有什么业务,也不想做管理...

561
来自专栏前端人人

React第三方组件2(状态管理之Refast的使用②异步修改state)

本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件2(状态管理之Refast的使用①...

2493

扫码关注云+社区