在使用C#进行应用程序的开发过程中,经常有一个需求就是让应用程序开机后自动启动,这个是一个很常见的需求,最常规的做法(这里以Win7操作系统为例),打开:开始=》所有程序=》启动文件夹(路径是:C:\Users\bobo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup),然后可以将exe(这里以X.Shell.exe为例来说明)或者其快捷方式放到当前文件夹下面,这样我们就可以在应用程序下次启动的时候自动启动当前应用程序中,同时我们也可以通过:Windows+R然后输入msconfig来查看系统配置,在启动中来查看启动项目,我们会看到在启动项下面会有刚才添加的应用程序X.Shell.exe,如下图所示:

这是我们再通过:Windows+R==>regedit来查看注册表信息,开是否写入了注册表中:我们没有发现写入到Windows的注册表中,注:Windows的默认开机启动项是写到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run这个键值下面。

所以最为合理的方式就是将exe程序写入到注册表中,首先看看插入和删除注册表信息的代码。

        private void AutoRunAfterStart()
{
//获取当前应用程序的路径
string localPath = Application.ExecutablePath;
if (!System.IO.File.Exists(localPath))//判断指定文件是否存在
return;
RegistryKey reg = Registry.LocalMachine;
RegistryKey run = reg.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
//判断注册表中是否存在当前名称和值
if (run.GetValue("ControlPanasonic.exe") == null)
{
try
{
run.SetValue("ControlPanasonic.exe", localPath);
MessageBox.Show(" 当前应用程序已成功写入注册表!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
reg.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
//删除注册表钟的特定值
private void DeleteSubKey()
{
RegistryKey reg = Registry.LocalMachine;
RegistryKey run = reg.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
try
{
run.DeleteValue("ControlPanasonic.exe");
MessageBox.Show(" 当前应用程序已成功从注册表中删除!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
reg.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "温馨提示",MessageBoxButtons.OK, MessageBoxIcon.Error);
} }

  现在就上面的代码做一些简要的分析,RegistryKey reg = Registry.LocalMachine;RegistryKey run = reg.CreateSubKey(@"SOFTWARE\Microsoft \Windows \CurrentVersion\Run");这两句代码的核心是获取RegistryKey 的对象,然后通过SetValue以及DeleteValue将当前的exe写入到注册表中,这样就能够永久去保存当前的键值对,从而确定开机启动项。

最新文章

  1. SpringMVC(五) RequestMapping 请求参数和请求头
  2. 4.CXF所支持的数据类型
  3. DP 子序列问题
  4. POJ 2533
  5. 在C#中使用属性控件添加属性窗口
  6. 测试HashTable、Collections.synchronizedMap和ConcurrentHashMap的性能
  7. ES6 for-of循环和迭代器使用细节
  8. java同时连接db2和mysql的程序
  9. Oarcle之事务
  10. Beta冲刺 2
  11. Part-Three 类与对象
  12. 001.NoSQL及MongoDB简介
  13. KeepAlived+MySQL互为主从
  14. Java中List, Integer[], int[]的相互转换
  15. [转]C#利用反射实现两个类的对象之间相同属性的值的复制
  16. vue 弹性布局 实现长图垂直居上,短图垂直居中
  17. java replaceAll之$替换
  18. Ionic国际化解决方案
  19. python抓包模块
  20. 智能家居入门DIY——【四、组合】

热门文章

  1. Google Colab 基本操作
  2. 定义静态map
  3. Java IO(五)——字符流进阶及BufferedWriter、BufferedReader
  4. Unity编辑器:基于NGUI的引用检测工具
  5. Ubuntu18.04安装Tensorflow
  6. 深入理解[Master-Worker模式]原理与技术
  7. LeetCode 961. N-Repeated Element in Size 2N Array
  8. 学习用Node.js和Elasticsearch构建搜索引擎(4): 构建Elasticsearch搜索引擎
  9. Python常用内建方法:__init__,__new__,__class__的理解
  10. Palindromic characteristics CodeForces - 835D (区间DP,预处理回文串问题)